[core] RenderTile shall never be created for a not renderable tile
A RenderTile is already never created for a not renderable tile, guarantied by the checks in `updateRenderables()`. However, the client code had plenty of `isRenderable()` checks in the render path, which complicated the code and affected rendering performance. This patch removes the unneeded checks from the client code and puts an assertion to `TilePyramid::addRenderTile()`.
This commit is contained in:
@@ -40,8 +40,7 @@ bool RenderLayer::supportsZoom(float zoom) const {
|
||||
}
|
||||
|
||||
void RenderLayer::setRenderTiles(RenderTiles tiles, const TransformState&) {
|
||||
auto filterFn = [](auto& tile){ return !tile.tile.isRenderable() || tile.tile.holdForFade(); };
|
||||
renderTiles = filterRenderTiles(std::move(tiles), filterFn);
|
||||
renderTiles = filterRenderTiles(std::move(tiles));
|
||||
}
|
||||
|
||||
const RenderLayerSymbolInterface* RenderLayer::getSymbolInterface() const {
|
||||
@@ -52,16 +51,16 @@ optional<Color> RenderLayer::getSolidBackground() const {
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
RenderLayer::RenderTiles RenderLayer::filterRenderTiles(RenderTiles tiles, FilterFunctionPtr filterFn) const {
|
||||
assert(filterFn != nullptr);
|
||||
RenderLayer::RenderTiles RenderLayer::filterRenderTiles(RenderTiles tiles) const {
|
||||
RenderTiles filtered;
|
||||
|
||||
for (auto& tileRef : tiles) {
|
||||
auto& tile = tileRef.get();
|
||||
if (filterFn(tile)) {
|
||||
auto& tile = tileRef.get().tile;
|
||||
assert(tile.isRenderable());
|
||||
if (tile.holdForFade()) {
|
||||
continue;
|
||||
}
|
||||
filtered.emplace_back(tile);
|
||||
filtered.emplace_back(tileRef);
|
||||
}
|
||||
return filtered;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user