summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-04-10 14:25:09 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-04-11 15:55:25 +0300
commit6157d6ed745b88999b6550cfae2d6ae2daa8e6c1 (patch)
tree3cbc2fd69e21553222a7ec25660504cf5c02e6e4
parent46b3cc95a73d988dbe915010f443c54d874a8ade (diff)
downloadqtlocation-mapboxgl-6157d6ed745b88999b6550cfae2d6ae2daa8e6c1.tar.gz
[core] Update `style::LayerProperties` instances in tiles
-rw-r--r--src/mbgl/renderer/buckets/symbol_bucket.cpp28
-rw-r--r--src/mbgl/renderer/buckets/symbol_bucket.hpp8
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.cpp23
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.hpp3
-rw-r--r--src/mbgl/renderer/render_layer.cpp17
-rw-r--r--src/mbgl/renderer/render_layer.hpp5
-rw-r--r--src/mbgl/renderer/tile_pyramid.cpp21
-rw-r--r--src/mbgl/renderer/tile_pyramid.hpp2
-rw-r--r--src/mbgl/tile/geometry_tile.cpp24
-rw-r--r--src/mbgl/tile/geometry_tile.hpp3
-rw-r--r--src/mbgl/tile/tile.hpp4
-rw-r--r--test/style/source.test.cpp48
-rw-r--r--test/tile/custom_geometry_tile.test.cpp5
-rw-r--r--test/tile/geojson_tile.test.cpp10
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'>&copy; 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'>&copy; 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();