diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-10 14:25:09 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-11 15:55:25 +0300 |
commit | 6157d6ed745b88999b6550cfae2d6ae2daa8e6c1 (patch) | |
tree | 3cbc2fd69e21553222a7ec25660504cf5c02e6e4 | |
parent | 46b3cc95a73d988dbe915010f443c54d874a8ade (diff) | |
download | qtlocation-mapboxgl-6157d6ed745b88999b6550cfae2d6ae2daa8e6c1.tar.gz |
[core] Update `style::LayerProperties` instances in tiles
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.cpp | 28 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 23 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_layer.cpp | 17 | ||||
-rw-r--r-- | src/mbgl/renderer/render_layer.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.cpp | 21 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 24 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/tile/tile.hpp | 4 | ||||
-rw-r--r-- | test/style/source.test.cpp | 48 | ||||
-rw-r--r-- | test/tile/custom_geometry_tile.test.cpp | 5 | ||||
-rw-r--r-- | test/tile/geojson_tile.test.cpp | 10 |
14 files changed, 115 insertions, 86 deletions
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index 4b5207da39..c7eb7c6e5c 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -8,10 +8,6 @@ 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, Immutable<style::LayerProperties>>& paintProperties_, const style::PropertyValue<float>& textSize, @@ -34,17 +30,13 @@ SymbolBucket::SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated layo tilePixelRatio(tilePixelRatio_) { for (const auto& pair : paintProperties_) { - auto layerPaintProperties = toSymbolLayerProperties(pair.second).evaluated; - if (hasFormatSectionOverrides()) { - setPaintPropertyOverrides(layerPaintProperties); - } + const auto& evaluated = getEvaluated<SymbolLayerProperties>(pair.second); paintProperties.emplace( std::piecewise_construct, std::forward_as_tuple(pair.first), std::forward_as_tuple(PaintProperties { - layerPaintProperties, - { RenderSymbolLayer::iconPaintProperties(layerPaintProperties), zoom }, - { RenderSymbolLayer::textPaintProperties(layerPaintProperties), zoom } + { RenderSymbolLayer::iconPaintProperties(evaluated), zoom }, + { RenderSymbolLayer::textPaintProperties(evaluated), zoom } })); } } @@ -246,19 +238,7 @@ void SymbolBucket::sortFeatures(const float angle) { } } -void SymbolBucket::updatePaintProperties(const std::string& layerID, - style::SymbolPaintProperties::PossiblyEvaluated updated) { - if (hasFormatSectionOverrides()) { - SymbolLayerPaintPropertyOverrides::updateOverrides(paintProperties.at(layerID).evaluated, updated); - } - paintProperties.at(layerID).evaluated = updated; -} - -void SymbolBucket::setPaintPropertyOverrides(style::SymbolPaintProperties::PossiblyEvaluated& paint) { - SymbolLayerPaintPropertyOverrides::setOverrides(layout, paint); -} - -bool SymbolBucket::hasFormatSectionOverrides() { +bool SymbolBucket::hasFormatSectionOverrides() const { if (!hasFormatSectionOverrides_) { hasFormatSectionOverrides_= SymbolLayerPaintPropertyOverrides::hasOverrides(layout.get<TextField>()); } diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index ca740c5488..61b4435e77 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -61,10 +61,7 @@ public: bool hasIconData() const; bool hasCollisionBoxData() const; bool hasCollisionCircleData() const; - bool hasFormatSectionOverrides(); - void updatePaintProperties(const std::string& layerID, - style::SymbolPaintProperties::PossiblyEvaluated); - void setPaintPropertyOverrides(style::SymbolPaintProperties::PossiblyEvaluated&); + bool hasFormatSectionOverrides() const; void updateOpacity(); void sortFeatures(const float angle); @@ -86,7 +83,6 @@ public: std::vector<SymbolInstance> symbolInstances; struct PaintProperties { - style::SymbolPaintProperties::PossiblyEvaluated evaluated; SymbolIconProgram::Binders iconBinders; SymbolSDFTextProgram::Binders textBinders; }; @@ -136,7 +132,7 @@ public: const float tilePixelRatio; uint32_t bucketInstanceId = 0; bool justReloaded = false; - optional<bool> hasFormatSectionOverrides_; + mutable optional<bool> hasFormatSectionOverrides_; std::shared_ptr<std::vector<size_t>> featureSortOrder; }; diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index ddda61c5ea..ebdc0272ab 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -51,13 +51,20 @@ RenderSymbolLayer::~RenderSymbolLayer() = default; void RenderSymbolLayer::transition(const TransitionParameters& parameters) { unevaluated = impl(baseImpl).paint.transitioned(parameters, std::move(unevaluated)); + hasFormatSectionOverrides = SymbolLayerPaintPropertyOverrides::hasOverrides(impl(baseImpl).layout.get<TextField>()); } void RenderSymbolLayer::evaluate(const PropertyEvaluationParameters& parameters) { auto properties = makeMutable<SymbolLayerProperties>( staticImmutableCast<SymbolLayer::Impl>(baseImpl), unevaluated.evaluate(parameters)); - const auto& evaluated = properties->evaluated; + auto& evaluated = properties->evaluated; + auto& layout = impl(baseImpl).layout; + + if (hasFormatSectionOverrides) { + SymbolLayerPaintPropertyOverrides::setOverrides(layout, evaluated); + } + auto hasIconOpacity = evaluated.get<style::IconColor>().constantOr(Color::black()).a > 0 || evaluated.get<style::IconHaloColor>().constantOr(Color::black()).a > 0; auto hasTextOpacity = evaluated.get<style::TextColor>().constantOr(Color::black()).a > 0 || @@ -98,14 +105,14 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { return; } for (const RenderTile& tile : renderTiles) { - auto bucket_ = tile.tile.getBucket<SymbolBucket>(*baseImpl); - if (!bucket_) { + const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + if (!renderData) { continue; } - SymbolBucket& bucket = *bucket_; + auto& bucket = static_cast<SymbolBucket&>(*renderData->bucket); + const auto& evaluated_ = getEvaluated<SymbolLayerProperties>(renderData->layerProperties); assert(bucket.paintProperties.find(getID()) != bucket.paintProperties.end()); const auto& bucketPaintProperties = bucket.paintProperties.at(getID()); - const auto& evaluated_ = bucketPaintProperties.evaluated; const auto& layout = bucket.layout; auto draw = [&] (auto& programInstance, @@ -494,10 +501,4 @@ void RenderSymbolLayer::setRenderTiles(RenderTiles tiles, const TransformState& }); } -void RenderSymbolLayer::updateBucketPaintProperties(Bucket* bucket) const { - assert(bucket->supportsLayer(*baseImpl)); - const auto& evaluated = static_cast<const SymbolLayerProperties&>(*evaluatedProperties).evaluated; - static_cast<SymbolBucket*>(bucket)->updatePaintProperties(getID(), evaluated); -} - } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_symbol_layer.hpp b/src/mbgl/renderer/layers/render_symbol_layer.hpp index dd08b79e57..1ab4585975 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.hpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.hpp @@ -81,11 +81,12 @@ private: float iconSize = 1.0f; float textSize = 16.0f; + bool hasFormatSectionOverrides = false; + static style::SymbolPropertyValues iconPropertyValues(const style::SymbolPaintProperties::PossiblyEvaluated&, const style::SymbolLayoutProperties::PossiblyEvaluated&); static style::SymbolPropertyValues textPropertyValues(const style::SymbolPaintProperties::PossiblyEvaluated&, const style::SymbolLayoutProperties::PossiblyEvaluated&); - void updateBucketPaintProperties(Bucket*) const override; }; } // namespace mbgl diff --git a/src/mbgl/renderer/render_layer.cpp b/src/mbgl/renderer/render_layer.cpp index c2719fef91..b844c3f60d 100644 --- a/src/mbgl/renderer/render_layer.cpp +++ b/src/mbgl/renderer/render_layer.cpp @@ -54,24 +54,13 @@ optional<Color> RenderLayer::getSolidBackground() const { RenderLayer::RenderTiles RenderLayer::filterRenderTiles(RenderTiles tiles, FilterFunctionPtr filterFn) const { assert(filterFn != nullptr); RenderTiles filtered; - // We only need clipping when we're drawing fill or line layers. - const bool needsClipping_ = - baseImpl->getTypeInfo()->clipping == LayerTypeInfo::Clipping::Required; for (auto& tileRef : tiles) { auto& tile = tileRef.get(); if (filterFn(tile)) { continue; } - - if (Bucket* bucket = tile.tile.getBucket(*baseImpl)) { - tile.used = true; - tile.needsClipping |= needsClipping_; - filtered.emplace_back(tile); - if (tile.tile.isComplete()) { - updateBucketPaintProperties(bucket); - } - } + filtered.emplace_back(tile); } return filtered; } @@ -80,10 +69,6 @@ void RenderLayer::markContextDestroyed() { // no-op } -void RenderLayer::updateBucketPaintProperties(Bucket*) const { - // no-op -} - void RenderLayer::checkRenderability(const PaintParameters& parameters, const uint32_t activeBindingCount) { // Only warn once for every layer. diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index 3a762947db..692fc85f29 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -92,11 +92,6 @@ protected: // in the console to inform the developer. void checkRenderability(const PaintParameters&, uint32_t activeBindingCount); - // For some layers, we want Buckets to cache their corresponding paint properties, so that outdated buckets (and - // 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/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp index 6e1bddec0a..37925a54b7 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -238,6 +238,27 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l for (auto& pair : tiles) { pair.second->setShowCollisionBoxes(parameters.debugOptions & MapDebugOptions::Collision); } + + // Initialize render tiles fields and update the tile contained layer render data. + for (RenderTile& renderTile : renderTiles) { + Tile& tile = renderTile.tile; + if (!tile.isRenderable()) continue; + + const bool holdForFade = tile.holdForFade(); + for (const auto& layerProperties : layers) { + const auto* typeInfo = layerProperties->baseImpl->getTypeInfo(); + if (holdForFade && typeInfo->fadingTiles == LayerTypeInfo::FadingTiles::NotRequired) { + continue; + } + // Update layer properties for complete tiles; for incomplete just check the presence. + bool layerRenderableInTile = tile.isComplete() ? tile.updateLayerProperties(layerProperties) + : static_cast<bool>(tile.getBucket(*layerProperties->baseImpl)); + if (layerRenderableInTile) { + renderTile.used = true; + renderTile.needsClipping = (renderTile.needsClipping || typeInfo->clipping == LayerTypeInfo::Clipping::Required); + } + } + } } void TilePyramid::handleWrapJump(float lng) { diff --git a/src/mbgl/renderer/tile_pyramid.hpp b/src/mbgl/renderer/tile_pyramid.hpp index 594330e0c9..98eafc39e6 100644 --- a/src/mbgl/renderer/tile_pyramid.hpp +++ b/src/mbgl/renderer/tile_pyramid.hpp @@ -33,7 +33,7 @@ public: bool isLoaded() const; - void update(const std::vector<Immutable<style::LayerProperties>>&, + void update(const std::vector<Immutable<style::LayerProperties>>& visibleLayers, bool needsRendering, bool needsRelayout, const TileParameters&, diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index 109b6377e1..792586e73d 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -206,16 +206,34 @@ Bucket* GeometryTile::getBucket(const Layer::Impl& layer) const { } const LayerRenderData* GeometryTile::getLayerRenderData(const style::Layer::Impl& layerImpl) const { - const auto it = layerIdToLayerRenderData.find(layerImpl.id); + auto* that = const_cast<GeometryTile*>(this); + return that->getMutableLayerRenderData(layerImpl); +} + +bool GeometryTile::updateLayerProperties(const Immutable<style::LayerProperties>& layerProperties) { + LayerRenderData* renderData = getMutableLayerRenderData(*layerProperties->baseImpl); + if (!renderData) { + return false; + } + + if (renderData->layerProperties != layerProperties) { + renderData->layerProperties = layerProperties; + } + + return true; +} + +LayerRenderData* GeometryTile::getMutableLayerRenderData(const style::Layer::Impl& layerImpl) { + auto it = layerIdToLayerRenderData.find(layerImpl.id); if (it == layerIdToLayerRenderData.end()) { return nullptr; } - const LayerRenderData& result = it->second; + LayerRenderData& result = it->second; if (result.layerProperties->baseImpl->getTypeInfo() != layerImpl.getTypeInfo()) { // Layer data might be outdated, see issue #12432. return nullptr; } - return &result; + return &result; } float GeometryTile::getQueryPadding(const std::vector<const RenderLayer*>& layers) { diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 231e71190b..18f94b9a1f 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -45,6 +45,7 @@ public: void upload(gfx::Context&) override; Bucket* getBucket(const style::Layer::Impl&) const override; const LayerRenderData* getLayerRenderData(const style::Layer::Impl&) const override; + bool updateLayerProperties(const Immutable<style::LayerProperties>&) override; void queryRenderedFeatures( std::unordered_map<std::string, std::vector<Feature>>& result, @@ -96,6 +97,8 @@ protected: return latestFeatureIndex ? latestFeatureIndex->getData() : nullptr; } + LayerRenderData* getMutableLayerRenderData(const style::Layer::Impl&); + private: void markObsolete(); diff --git a/src/mbgl/tile/tile.hpp b/src/mbgl/tile/tile.hpp index 50fd67bedd..651bafe277 100644 --- a/src/mbgl/tile/tile.hpp +++ b/src/mbgl/tile/tile.hpp @@ -60,6 +60,10 @@ public: virtual const LayerRenderData* getLayerRenderData(const style::Layer::Impl&) const { return nullptr; } + // Updates the contained layer render data with the given properties. + // Returns `true` if the corresponding render layer data is present in this tile (and i.e. it + // was succesfully updated); returns `false` otherwise. + virtual bool updateLayerProperties(const Immutable<style::LayerProperties>&) { return true; } template <class T> T* getBucket(const style::Layer::Impl& layer) const { diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp index 8bc152926f..f0ff1f81b4 100644 --- a/test/style/source.test.cpp +++ b/test/style/source.test.cpp @@ -12,8 +12,11 @@ #include <mbgl/style/sources/image_source.hpp> #include <mbgl/style/sources/custom_geometry_source.hpp> #include <mbgl/style/layers/hillshade_layer.hpp> +#include <mbgl/style/layers/hillshade_layer_impl.hpp> #include <mbgl/style/layers/raster_layer.hpp> +#include <mbgl/style/layers/raster_layer_impl.hpp> #include <mbgl/style/layers/line_layer.hpp> +#include <mbgl/style/layers/line_layer_impl.hpp> #include <mbgl/renderer/sources/render_raster_source.hpp> #include <mbgl/renderer/sources/render_raster_dem_source.hpp> @@ -148,7 +151,8 @@ TEST(Source, RasterTileEmpty) { }; RasterLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<RasterLayerProperties>(staticImmutableCast<RasterLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -186,7 +190,8 @@ TEST(Source, RasterDEMTileEmpty) { }; HillshadeLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<HillshadeLayerProperties>(staticImmutableCast<HillshadeLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -226,7 +231,8 @@ TEST(Source, VectorTileEmpty) { LineLayer layer("id", "source"); layer.setSourceLayer("water"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<LineLayerProperties>(staticImmutableCast<LineLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -266,7 +272,8 @@ TEST(Source, RasterTileFail) { }; RasterLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<RasterLayerProperties>(staticImmutableCast<RasterLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -304,7 +311,8 @@ TEST(Source, RasterDEMTileFail) { }; HillshadeLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<HillshadeLayerProperties>(staticImmutableCast<HillshadeLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -344,7 +352,8 @@ TEST(Source, VectorTileFail) { LineLayer layer("id", "source"); layer.setSourceLayer("water"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<LineLayerProperties>(staticImmutableCast<LineLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -380,7 +389,8 @@ TEST(Source, RasterTileCorrupt) { }; RasterLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<RasterLayerProperties>(staticImmutableCast<RasterLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -417,7 +427,8 @@ TEST(Source, RasterDEMTileCorrupt) { }; HillshadeLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<HillshadeLayerProperties>(staticImmutableCast<HillshadeLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties };; Tileset tileset; tileset.tiles = { "tiles" }; @@ -456,7 +467,8 @@ TEST(Source, VectorTileCorrupt) { LineLayer layer("id", "source"); layer.setSourceLayer("water"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<LineLayerProperties>(staticImmutableCast<LineLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -491,7 +503,8 @@ TEST(Source, RasterTileCancel) { }; RasterLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<RasterLayerProperties>(staticImmutableCast<RasterLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -527,7 +540,8 @@ TEST(Source, RasterDEMTileCancel) { }; HillshadeLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<HillshadeLayerProperties>(staticImmutableCast<HillshadeLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -565,7 +579,8 @@ TEST(Source, VectorTileCancel) { LineLayer layer("id", "source"); layer.setSourceLayer("water"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<LineLayerProperties>(staticImmutableCast<LineLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; Tileset tileset; tileset.tiles = { "tiles" }; @@ -596,7 +611,8 @@ TEST(Source, RasterTileAttribution) { SourceTest test; RasterLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<RasterLayerProperties>(staticImmutableCast<RasterLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; std::string mapboxOSM = ("<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox</a> " "<a href='http://www.openstreetmap.org/about/' target='_blank'>©️ OpenStreetMap</a>"); @@ -640,7 +656,8 @@ TEST(Source, RasterDEMTileAttribution) { SourceTest test; HillshadeLayer layer("id", "source"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<HillshadeLayerProperties>(staticImmutableCast<HillshadeLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; std::string mapbox = ("<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox</a> "); @@ -752,7 +769,8 @@ TEST(Source, CustomGeometrySourceSetTileData) { LineLayer layer("id", "source"); layer.setSourceLayer("water"); - std::vector<Immutable<Layer::Impl>> layers {{ layer.baseImpl }}; + Immutable<LayerProperties> layerProperties = makeMutable<LineLayerProperties>(staticImmutableCast<LineLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; test.renderSourceObserver.tileChanged = [&] (RenderSource& source_, const OverscaledTileID&) { EXPECT_EQ("source", source_.baseImpl->id); diff --git a/test/tile/custom_geometry_tile.test.cpp b/test/tile/custom_geometry_tile.test.cpp index dc6aaab1ac..7a627bad88 100644 --- a/test/tile/custom_geometry_tile.test.cpp +++ b/test/tile/custom_geometry_tile.test.cpp @@ -11,6 +11,7 @@ #include <mbgl/renderer/tile_parameters.hpp> #include <mbgl/style/style.hpp> #include <mbgl/style/layers/circle_layer.hpp> +#include <mbgl/style/layers/circle_layer_impl.hpp> #include <mbgl/annotation/annotation_manager.hpp> #include <mbgl/renderer/image_manager.hpp> #include <mbgl/text/glyph_manager.hpp> @@ -120,7 +121,9 @@ TEST(CustomGeometryTile, InvokeTileChanged) { ASSERT_NE(nullptr, tile.getBucket(*layer.baseImpl)); }; - tile.setLayers({{ layer.baseImpl }}); + Immutable<LayerProperties> layerProperties = makeMutable<CircleLayerProperties>(staticImmutableCast<CircleLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; + tile.setLayers(layers); tile.setObserver(&observer); tile.setTileData(features); diff --git a/test/tile/geojson_tile.test.cpp b/test/tile/geojson_tile.test.cpp index fb5f3ca6d7..772590efb2 100644 --- a/test/tile/geojson_tile.test.cpp +++ b/test/tile/geojson_tile.test.cpp @@ -10,6 +10,7 @@ #include <mbgl/renderer/tile_parameters.hpp> #include <mbgl/style/style.hpp> #include <mbgl/style/layers/circle_layer.hpp> +#include <mbgl/style/layers/circle_layer_impl.hpp> #include <mbgl/annotation/annotation_manager.hpp> #include <mbgl/renderer/image_manager.hpp> #include <mbgl/text/glyph_manager.hpp> @@ -61,8 +62,9 @@ TEST(GeoJSONTile, Issue7648) { // flickering. ASSERT_NE(nullptr, tile.getBucket(*layer.baseImpl)); }; - - tile.setLayers({{ layer.baseImpl }}); + Immutable<LayerProperties> layerProperties = makeMutable<CircleLayerProperties>(staticImmutableCast<CircleLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; + tile.setLayers(layers); tile.setObserver(&observer); while (!tile.isComplete()) { @@ -87,7 +89,9 @@ TEST(GeoJSONTile, Issue9927) { GeoJSONTile tile(OverscaledTileID(0, 0, 0), "source", test.tileParameters, features); - tile.setLayers({{ layer.baseImpl }}); + Immutable<LayerProperties> layerProperties = makeMutable<CircleLayerProperties>(staticImmutableCast<CircleLayer::Impl>(layer.baseImpl)); + std::vector<Immutable<LayerProperties>> layers { layerProperties }; + tile.setLayers(layers); while (!tile.isComplete()) { test.loop.runOnce(); |