[core] don't generate clip IDs for buckets/layers that don't need to be clipped

This commit is contained in:
Konstantin Käfer
2017-10-13 17:53:30 -07:00
parent 12f78fc874
commit cbff0a972a
4 changed files with 14 additions and 3 deletions

View File

@@ -17,7 +17,7 @@ void ClipIDGenerator::update(std::vector<std::reference_wrapper<Renderable>> ren
const auto end = renderables.end();
for (auto it = renderables.begin(); it != end; it++) {
auto& renderable = it->get();
if (!renderable.used) {
if (!renderable.used || !renderable.needsClipping) {
continue;
}

View File

@@ -28,6 +28,7 @@ public:
mat4 matrix;
mat4 nearClippedMatrix;
bool used = false;
bool needsClipping = false;
mat4 translatedMatrix(const std::array<float, 2>& translate,
style::TranslateAnchorType anchor,

View File

@@ -370,6 +370,13 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
if (bucket) {
sortedTilesForInsertion.emplace_back(tile);
tile.used = true;
// We only need clipping when we're _not_ drawing a symbol layer. The only exception
// for symbol layers is when we're rendering still images. See render_symbol_layer.cpp
// for the exception we make there.
if (!symbolLayer || parameters.mapMode == MapMode::Still) {
tile.needsClipping = true;
}
}
}
layer->setRenderTiles(std::move(sortedTilesForInsertion));

View File

@@ -8,13 +8,16 @@ struct Renderable {
UnwrappedTileID id;
ClipID clip;
bool used;
bool needsClipping;
Renderable(UnwrappedTileID id_,
ClipID clip_,
bool used_ = true)
bool used_ = true,
bool needsClipping_ = true)
: id(std::move(id_)),
clip(std::move(clip_)),
used(used_) {}
used(used_),
needsClipping(needsClipping_) {}
bool operator==(const Renderable& rhs) const {
return id == rhs.id && clip == rhs.clip;