[core] don't assign clip IDs to tiles that aren't rendered
This commit is contained in:
@@ -15,6 +15,10 @@ void ClipIDGenerator::update(Renderables& renderables) {
|
||||
for (auto it = renderables.begin(); it != end; it++) {
|
||||
auto& tileID = it->first;
|
||||
auto& renderable = it->second;
|
||||
if (!renderable.used) {
|
||||
continue;
|
||||
}
|
||||
|
||||
renderable.clip = {};
|
||||
Leaf leaf{ renderable.clip };
|
||||
|
||||
@@ -58,6 +62,9 @@ void ClipIDGenerator::update(Renderables& renderables) {
|
||||
uint8_t count = 1;
|
||||
for (auto& pair : renderables) {
|
||||
auto& renderable = pair.second;
|
||||
if (!renderable.used) {
|
||||
continue;
|
||||
}
|
||||
renderable.clip.mask |= mask;
|
||||
|
||||
// Assign only to clip IDs that have no value yet.
|
||||
|
||||
@@ -24,6 +24,7 @@ public:
|
||||
Tile& tile;
|
||||
ClipID clip;
|
||||
mat4 matrix;
|
||||
bool used = false;
|
||||
|
||||
mat4 translatedMatrix(const std::array<float, 2>& translate,
|
||||
style::TranslateAnchorType anchor,
|
||||
|
||||
@@ -70,11 +70,13 @@ void Source::Impl::startRender(algorithm::ClipIDGenerator& generator,
|
||||
void Source::Impl::finishRender(Painter& painter) {
|
||||
for (auto& pair : renderTiles) {
|
||||
auto& tile = pair.second;
|
||||
painter.renderTileDebug(tile);
|
||||
if (tile.used) {
|
||||
painter.renderTileDebug(tile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const std::map<UnwrappedTileID, RenderTile>& Source::Impl::getRenderTiles() const {
|
||||
std::map<UnwrappedTileID, RenderTile>& Source::Impl::getRenderTiles() {
|
||||
return renderTiles;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ public:
|
||||
const TransformState&);
|
||||
void finishRender(Painter&);
|
||||
|
||||
const std::map<UnwrappedTileID, RenderTile>& getRenderTiles() const;
|
||||
std::map<UnwrappedTileID, RenderTile>& getRenderTiles();
|
||||
|
||||
std::unordered_map<std::string, std::vector<Feature>>
|
||||
queryRenderedFeatures(const QueryParameters&) const;
|
||||
|
||||
@@ -404,6 +404,7 @@ RenderData Style::getRenderData(MapDebugOptions debugOptions) const {
|
||||
auto bucket = tile.tile.getBucket(*layer);
|
||||
if (bucket) {
|
||||
result.order.emplace_back(*layer, &tile, bucket);
|
||||
tile.used = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using namespace mbgl;
|
||||
|
||||
struct Renderable {
|
||||
ClipID clip;
|
||||
bool used = true;
|
||||
|
||||
bool operator==(const Renderable& rhs) const {
|
||||
return clip == rhs.clip;
|
||||
|
||||
@@ -419,3 +419,32 @@ TEST(Annotations, VisibleFeatures) {
|
||||
features.erase(std::unique(features.begin(), features.end(), sameID), features.end());
|
||||
EXPECT_EQ(features.size(), ids.size());
|
||||
}
|
||||
|
||||
|
||||
TEST(Annotations, DebugEmpty) {
|
||||
// This test should render nothing, not even the tile borders. Tile borders are only rendered
|
||||
// when there is an actual tile we're trying to render, but since there is no annotation, we
|
||||
// should not render them.
|
||||
AnnotationTest test;
|
||||
|
||||
test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"));
|
||||
test.map.setDebug(MapDebugOptions::TileBorders);
|
||||
test.map.setZoom(1);
|
||||
|
||||
test.checkRendering("debug_empty");
|
||||
}
|
||||
|
||||
|
||||
TEST(Annotations, DebugSparse) {
|
||||
// This test should only render the top right tile with the associated tile border, but no other
|
||||
// tiles because they're all empty.
|
||||
AnnotationTest test;
|
||||
|
||||
test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"));
|
||||
test.map.setDebug(MapDebugOptions::TileBorders);
|
||||
test.map.setZoom(1);
|
||||
test.map.addAnnotationIcon("default_marker", namedMarker("default_marker.png"));
|
||||
test.map.addAnnotation(SymbolAnnotation { Point<double>(10, 10), "default_marker" });
|
||||
|
||||
test.checkRendering("debug_sparse");
|
||||
}
|
||||
|
||||
BIN
test/fixtures/annotations/debug_empty/expected.png
vendored
Normal file
BIN
test/fixtures/annotations/debug_empty/expected.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
test/fixtures/annotations/debug_sparse/expected.png
vendored
Normal file
BIN
test/fixtures/annotations/debug_sparse/expected.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
Reference in New Issue
Block a user