diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-07 23:24:17 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-17 17:21:41 +0300 |
commit | 7a7192516ffa9b4ed5b94b60961a4dc74fcf6e64 (patch) | |
tree | 432a69b7a31b833304ccafcffe83b0cfe00d3c1f /src/mbgl/renderer | |
parent | 4b21560cf59877125ea0bdae1a2546ab06f1efb2 (diff) | |
download | qtlocation-mapboxgl-7a7192516ffa9b4ed5b94b60961a4dc74fcf6e64.tar.gz |
[core] Introduce `LayerRenderData`. Source::update() accepts layer properties.
Diffstat (limited to 'src/mbgl/renderer')
25 files changed, 44 insertions, 33 deletions
diff --git a/src/mbgl/renderer/buckets/fill_bucket.cpp b/src/mbgl/renderer/buckets/fill_bucket.cpp index 2dffc555e2..c69b60327d 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.cpp +++ b/src/mbgl/renderer/buckets/fill_bucket.cpp @@ -28,7 +28,7 @@ using namespace style; struct GeometryTooLongException : std::exception {}; FillBucket::FillBucket(const FillBucket::PossiblyEvaluatedLayoutProperties, - std::map<std::string, FillBucket::PossiblyEvaluatedPaintProperties> layerPaintProperties, + const std::map<std::string, Immutable<style::LayerProperties>>& layerPaintProperties, const float zoom, const uint32_t) { @@ -37,7 +37,7 @@ FillBucket::FillBucket(const FillBucket::PossiblyEvaluatedLayoutProperties, std::piecewise_construct, std::forward_as_tuple(pair.first), std::forward_as_tuple( - pair.second, + getEvaluated<FillLayerProperties>(pair.second), zoom)); } } diff --git a/src/mbgl/renderer/buckets/fill_bucket.hpp b/src/mbgl/renderer/buckets/fill_bucket.hpp index 5844625d2a..217524c945 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_bucket.hpp @@ -22,7 +22,7 @@ public: using PossiblyEvaluatedLayoutProperties = style::Properties<>::PossiblyEvaluated; FillBucket(const PossiblyEvaluatedLayoutProperties layout, - std::map<std::string, PossiblyEvaluatedPaintProperties> layerPaintProperties, + const std::map<std::string, Immutable<style::LayerProperties>>& layerPaintProperties, const float zoom, const uint32_t overscaling); diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp index 61fc6a1444..7fa7293f33 100644 --- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp +++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp @@ -34,8 +34,8 @@ using namespace style; struct GeometryTooLongException : std::exception {}; -FillExtrusionBucket::FillExtrusionBucket(const FillExtrusionBucket::PossiblyEvaluatedLayoutProperties, - std::map<std::string, FillExtrusionBucket::PossiblyEvaluatedPaintProperties> layerPaintProperties, +FillExtrusionBucket::FillExtrusionBucket(const FillExtrusionBucket::PossiblyEvaluatedLayoutProperties&, + const std::map<std::string, Immutable<style::LayerProperties>>& layerPaintProperties, const float zoom, const uint32_t) { for (const auto& pair : layerPaintProperties) { @@ -43,7 +43,7 @@ FillExtrusionBucket::FillExtrusionBucket(const FillExtrusionBucket::PossiblyEval std::piecewise_construct, std::forward_as_tuple(pair.first), std::forward_as_tuple( - pair.second, + getEvaluated<FillExtrusionLayerProperties>(pair.second), zoom)); } } diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp index 9dc2681bac..85867031a7 100644 --- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp @@ -19,8 +19,8 @@ public: using PossiblyEvaluatedPaintProperties = style::FillExtrusionPaintProperties::PossiblyEvaluated; using PossiblyEvaluatedLayoutProperties = style::Properties<>::PossiblyEvaluated; - FillExtrusionBucket(const PossiblyEvaluatedLayoutProperties, - std::map<std::string, PossiblyEvaluatedPaintProperties>, + FillExtrusionBucket(const PossiblyEvaluatedLayoutProperties&, + const std::map<std::string, Immutable<style::LayerProperties>>&, const float, const uint32_t); diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp index 9a5ed9e628..c2cce632b3 100644 --- a/src/mbgl/renderer/buckets/line_bucket.cpp +++ b/src/mbgl/renderer/buckets/line_bucket.cpp @@ -11,7 +11,7 @@ namespace mbgl { using namespace style; LineBucket::LineBucket(const style::LineLayoutProperties::PossiblyEvaluated layout_, - const std::map<std::string, style::LinePaintProperties::PossiblyEvaluated>& layerPaintProperties, + const std::map<std::string, Immutable<style::LayerProperties>>& layerPaintProperties, const float zoom_, const uint32_t overscaling_) : layout(std::move(layout_)), @@ -23,7 +23,7 @@ LineBucket::LineBucket(const style::LineLayoutProperties::PossiblyEvaluated layo std::piecewise_construct, std::forward_as_tuple(pair.first), std::forward_as_tuple( - pair.second, + getEvaluated<LineLayerProperties>(pair.second), zoom)); } } diff --git a/src/mbgl/renderer/buckets/line_bucket.hpp b/src/mbgl/renderer/buckets/line_bucket.hpp index 6717ee7446..9afe7fecee 100644 --- a/src/mbgl/renderer/buckets/line_bucket.hpp +++ b/src/mbgl/renderer/buckets/line_bucket.hpp @@ -21,7 +21,7 @@ public: using PossiblyEvaluatedLayoutProperties = style::LineLayoutProperties::PossiblyEvaluated; LineBucket(const PossiblyEvaluatedLayoutProperties layout, - const std::map<std::string, PossiblyEvaluatedPaintProperties>& layerPaintProperties, + const std::map<std::string, Immutable<style::LayerProperties>>& layerPaintProperties, const float zoom, const uint32_t overscaling); ~LineBucket() override; diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index a0ebab20be..4b5207da39 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -8,8 +8,12 @@ namespace mbgl { using namespace style; +const SymbolLayerProperties& toSymbolLayerProperties(const Immutable<LayerProperties>& layer) { + return static_cast<const SymbolLayerProperties&>(*layer); +} + SymbolBucket::SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated layout_, - const std::map<std::string, style::SymbolPaintProperties::PossiblyEvaluated>& paintProperties_, + const std::map<std::string, Immutable<style::LayerProperties>>& paintProperties_, const style::PropertyValue<float>& textSize, const style::PropertyValue<float>& iconSize, float zoom, @@ -30,7 +34,7 @@ SymbolBucket::SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated layo tilePixelRatio(tilePixelRatio_) { for (const auto& pair : paintProperties_) { - auto layerPaintProperties = pair.second; + auto layerPaintProperties = toSymbolLayerProperties(pair.second).evaluated; if (hasFormatSectionOverrides()) { setPaintPropertyOverrides(layerPaintProperties); } diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index f8ffc1a8eb..ca740c5488 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -42,7 +42,7 @@ public: class SymbolBucket final : public Bucket { public: SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated, - const std::map<std::string, style::SymbolPaintProperties::PossiblyEvaluated>&, + const std::map<std::string, Immutable<style::LayerProperties>>&, const style::PropertyValue<float>& textSize, const style::PropertyValue<float>& iconSize, float zoom, diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index 9654b9213f..3a762947db 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -19,6 +19,12 @@ class RenderLayerSymbolInterface; class RenderTile; class TransformState; +class LayerRenderData { +public: + std::shared_ptr<Bucket> bucket; + Immutable<style::LayerProperties> layerProperties; +}; + class RenderLayer { protected: RenderLayer(Immutable<style::LayerProperties>); @@ -90,6 +96,7 @@ protected: // the cached paint properties) can be still in use while the tile is loading new buckets (which will // correpond to the current paint properties of the layer). virtual void updateBucketPaintProperties(Bucket*) const; + using FilterFunctionPtr = bool (*)(RenderTile&); RenderTiles filterRenderTiles(RenderTiles, FilterFunctionPtr) const; diff --git a/src/mbgl/renderer/render_source.hpp b/src/mbgl/renderer/render_source.hpp index fe8ac364bc..89e7f095fa 100644 --- a/src/mbgl/renderer/render_source.hpp +++ b/src/mbgl/renderer/render_source.hpp @@ -7,7 +7,7 @@ #include <mbgl/util/geojson.hpp> #include <mbgl/util/feature.hpp> #include <mbgl/style/source_impl.hpp> -#include <mbgl/style/layer_impl.hpp> +#include <mbgl/style/layer_properties.hpp> #include <unordered_map> #include <vector> @@ -50,7 +50,7 @@ public: virtual bool isLoaded() const = 0; virtual void update(Immutable<style::Source::Impl>, - const std::vector<Immutable<style::Layer::Impl>>&, + const std::vector<Immutable<style::LayerProperties>>&, bool needsRendering, bool needsRelayout, const TileParameters&) = 0; diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 5078e01edb..4a618919d4 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -242,7 +242,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { staticData->has3D = false; for (const auto& sourceImpl : *sourceImpls) { RenderSource* source = renderSources.at(sourceImpl->id).get(); - std::vector<Immutable<Layer::Impl>> filteredLayersForSource; + std::vector<Immutable<LayerProperties>> filteredLayersForSource; filteredLayersForSource.reserve(layerImpls->size()); bool sourceNeedsRendering = false; bool sourceNeedsRelayout = false; @@ -262,7 +262,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { sourceNeedsRelayout = (sourceNeedsRelayout || hasImageDiff || hasLayoutDifference(layerDiff, layerImpl->id)); if (layerNeedsRendering) { sourceNeedsRendering = true; - filteredLayersForSource.push_back(layerImpl); + filteredLayersForSource.push_back(layer->evaluatedProperties); renderItemsEmplaceHint = renderItems.emplace_hint(renderItemsEmplaceHint, *layer, source, index); } } diff --git a/src/mbgl/renderer/sources/render_custom_geometry_source.cpp b/src/mbgl/renderer/sources/render_custom_geometry_source.cpp index 2d28b8dd84..30b6e65f24 100644 --- a/src/mbgl/renderer/sources/render_custom_geometry_source.cpp +++ b/src/mbgl/renderer/sources/render_custom_geometry_source.cpp @@ -24,7 +24,7 @@ bool RenderCustomGeometrySource::isLoaded() const { } void RenderCustomGeometrySource::update(Immutable<style::Source::Impl> baseImpl_, - const std::vector<Immutable<Layer::Impl>>& layers, + const std::vector<Immutable<style::LayerProperties>>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { diff --git a/src/mbgl/renderer/sources/render_custom_geometry_source.hpp b/src/mbgl/renderer/sources/render_custom_geometry_source.hpp index 5533fe2b83..be9e022eb9 100644 --- a/src/mbgl/renderer/sources/render_custom_geometry_source.hpp +++ b/src/mbgl/renderer/sources/render_custom_geometry_source.hpp @@ -13,7 +13,7 @@ public: bool isLoaded() const final; void update(Immutable<style::Source::Impl>, - const std::vector<Immutable<style::Layer::Impl>>&, + const std::vector<Immutable<style::LayerProperties>>&, bool needsRendering, bool needsRelayout, const TileParameters&) final; diff --git a/src/mbgl/renderer/sources/render_geojson_source.cpp b/src/mbgl/renderer/sources/render_geojson_source.cpp index 3cfcfc7392..332ea4d170 100644 --- a/src/mbgl/renderer/sources/render_geojson_source.cpp +++ b/src/mbgl/renderer/sources/render_geojson_source.cpp @@ -84,7 +84,7 @@ bool RenderGeoJSONSource::isLoaded() const { } void RenderGeoJSONSource::update(Immutable<style::Source::Impl> baseImpl_, - const std::vector<Immutable<Layer::Impl>>& layers, + const std::vector<Immutable<LayerProperties>>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { diff --git a/src/mbgl/renderer/sources/render_geojson_source.hpp b/src/mbgl/renderer/sources/render_geojson_source.hpp index c23559c09a..c8e98f96ee 100644 --- a/src/mbgl/renderer/sources/render_geojson_source.hpp +++ b/src/mbgl/renderer/sources/render_geojson_source.hpp @@ -18,7 +18,7 @@ public: bool isLoaded() const final; void update(Immutable<style::Source::Impl>, - const std::vector<Immutable<style::Layer::Impl>>&, + const std::vector<Immutable<style::LayerProperties>>&, bool needsRendering, bool needsRelayout, const TileParameters&) final; diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp index 7190f25bc7..b6a75acacc 100644 --- a/src/mbgl/renderer/sources/render_image_source.cpp +++ b/src/mbgl/renderer/sources/render_image_source.cpp @@ -106,7 +106,7 @@ std::vector<Feature> RenderImageSource::querySourceFeatures(const SourceQueryOpt } void RenderImageSource::update(Immutable<style::Source::Impl> baseImpl_, - const std::vector<Immutable<Layer::Impl>>&, + const std::vector<Immutable<LayerProperties>>&, const bool needsRendering, const bool, const TileParameters& parameters) { diff --git a/src/mbgl/renderer/sources/render_image_source.hpp b/src/mbgl/renderer/sources/render_image_source.hpp index cf14e180fd..e5cdcd4d81 100644 --- a/src/mbgl/renderer/sources/render_image_source.hpp +++ b/src/mbgl/renderer/sources/render_image_source.hpp @@ -19,7 +19,7 @@ public: void finishRender(PaintParameters&) final; void update(Immutable<style::Source::Impl>, - const std::vector<Immutable<style::Layer::Impl>>&, + const std::vector<Immutable<style::LayerProperties>>&, bool needsRendering, bool needsRelayout, const TileParameters&) final; diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.cpp b/src/mbgl/renderer/sources/render_raster_dem_source.cpp index 63ab3ca370..c942432e64 100644 --- a/src/mbgl/renderer/sources/render_raster_dem_source.cpp +++ b/src/mbgl/renderer/sources/render_raster_dem_source.cpp @@ -23,7 +23,7 @@ bool RenderRasterDEMSource::isLoaded() const { } void RenderRasterDEMSource::update(Immutable<style::Source::Impl> baseImpl_, - const std::vector<Immutable<Layer::Impl>>& layers, + const std::vector<Immutable<LayerProperties>>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.hpp b/src/mbgl/renderer/sources/render_raster_dem_source.hpp index 48c7803e92..af76e22da7 100644 --- a/src/mbgl/renderer/sources/render_raster_dem_source.hpp +++ b/src/mbgl/renderer/sources/render_raster_dem_source.hpp @@ -13,7 +13,7 @@ public: bool isLoaded() const final; void update(Immutable<style::Source::Impl>, - const std::vector<Immutable<style::Layer::Impl>>&, + const std::vector<Immutable<style::LayerProperties>>&, bool needsRendering, bool needsRelayout, const TileParameters&) final; diff --git a/src/mbgl/renderer/sources/render_raster_source.cpp b/src/mbgl/renderer/sources/render_raster_source.cpp index 017763b96a..96e793f9b2 100644 --- a/src/mbgl/renderer/sources/render_raster_source.cpp +++ b/src/mbgl/renderer/sources/render_raster_source.cpp @@ -21,7 +21,7 @@ bool RenderRasterSource::isLoaded() const { } void RenderRasterSource::update(Immutable<style::Source::Impl> baseImpl_, - const std::vector<Immutable<Layer::Impl>>& layers, + const std::vector<Immutable<LayerProperties>>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { diff --git a/src/mbgl/renderer/sources/render_raster_source.hpp b/src/mbgl/renderer/sources/render_raster_source.hpp index 32539a046d..24242949bb 100644 --- a/src/mbgl/renderer/sources/render_raster_source.hpp +++ b/src/mbgl/renderer/sources/render_raster_source.hpp @@ -13,7 +13,7 @@ public: bool isLoaded() const final; void update(Immutable<style::Source::Impl>, - const std::vector<Immutable<style::Layer::Impl>>&, + const std::vector<Immutable<style::LayerProperties>>&, bool needsRendering, bool needsRelayout, const TileParameters&) final; diff --git a/src/mbgl/renderer/sources/render_vector_source.cpp b/src/mbgl/renderer/sources/render_vector_source.cpp index 61954a68e6..efcd11094c 100644 --- a/src/mbgl/renderer/sources/render_vector_source.cpp +++ b/src/mbgl/renderer/sources/render_vector_source.cpp @@ -24,7 +24,7 @@ bool RenderVectorSource::isLoaded() const { } void RenderVectorSource::update(Immutable<style::Source::Impl> baseImpl_, - const std::vector<Immutable<Layer::Impl>>& layers, + const std::vector<Immutable<style::LayerProperties>>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { diff --git a/src/mbgl/renderer/sources/render_vector_source.hpp b/src/mbgl/renderer/sources/render_vector_source.hpp index 6fd2425aa3..fe7147fc25 100644 --- a/src/mbgl/renderer/sources/render_vector_source.hpp +++ b/src/mbgl/renderer/sources/render_vector_source.hpp @@ -13,7 +13,7 @@ public: bool isLoaded() const final; void update(Immutable<style::Source::Impl>, - const std::vector<Immutable<style::Layer::Impl>>&, + const std::vector<Immutable<style::LayerProperties>>&, bool needsRendering, bool needsRelayout, const TileParameters&) final; diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp index b169fddf9c..6e1bddec0a 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -61,7 +61,7 @@ Tile* TilePyramid::getTile(const OverscaledTileID& tileID){ return it == tiles.end() ? cache.get(tileID) : it->second.get(); } -void TilePyramid::update(const std::vector<Immutable<style::Layer::Impl>>& layers, +void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters, diff --git a/src/mbgl/renderer/tile_pyramid.hpp b/src/mbgl/renderer/tile_pyramid.hpp index bc2c370780..594330e0c9 100644 --- a/src/mbgl/renderer/tile_pyramid.hpp +++ b/src/mbgl/renderer/tile_pyramid.hpp @@ -5,7 +5,7 @@ #include <mbgl/tile/tile.hpp> #include <mbgl/tile/tile_cache.hpp> #include <mbgl/style/types.hpp> -#include <mbgl/style/layer_impl.hpp> +#include <mbgl/style/layer_properties.hpp> #include <mbgl/util/mat4.hpp> #include <mbgl/util/feature.hpp> @@ -33,7 +33,7 @@ public: bool isLoaded() const; - void update(const std::vector<Immutable<style::Layer::Impl>>&, + void update(const std::vector<Immutable<style::LayerProperties>>&, bool needsRendering, bool needsRelayout, const TileParameters&, |