[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:
Mikhail Pozdnyakov
2019-05-13 11:25:29 +03:00
parent cd24f4c45f
commit 81823e35a6
5 changed files with 11 additions and 19 deletions

View File

@@ -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;
}