Drawable Renderer (#1570), Improve handling of multiple drawables per tile

This commit is contained in:
Tim Sylvester
2023-06-01 08:47:33 -07:00
committed by Bart Louwers
parent 51c270495b
commit ee7f57fcb4
5 changed files with 30 additions and 28 deletions

View File

@@ -20,6 +20,7 @@
#include <mbgl/tile/tile.hpp>
#include <mbgl/util/convert.hpp>
#include <mbgl/util/intersection_tests.hpp>
#include <mbgl/util/logging.hpp>
#include <mbgl/util/math.hpp>
namespace mbgl {
@@ -287,8 +288,7 @@ void RenderFillLayer::update(gfx::ShaderRegistry& shaders,
if (!renderTiles || renderTiles->empty()) {
if (tileLayerGroup) {
stats.tileDrawablesRemoved += tileLayerGroup->getDrawableCount();
tileLayerGroup->clearDrawables();
stats.tileDrawablesRemoved += tileLayerGroup->clearDrawables();
}
return;
}
@@ -359,7 +359,11 @@ void RenderFillLayer::update(gfx::ShaderRegistry& shaders,
for (const RenderTile& tile : *renderTiles) {
const auto& tileID = tile.getOverscaledTileID();
auto& tileDrawable = tileLayerGroup->getDrawable(renderPass, tileID);
// If we already have drawables for this tile, skip.
// If a drawable needs to be updated, that's handled in the layer tweaker.
if (tileLayerGroup->getDrawableCount(renderPass, tileID) > 0) {
continue;
}
const LayerRenderData* renderData = getRenderDataForPass(tile, renderPass);
if (!renderData) {
@@ -449,10 +453,6 @@ void RenderFillLayer::update(gfx::ShaderRegistry& shaders,
}
}
if (tileDrawable) {
continue;
}
if (doFill && !fillBuilder && fillShader) {
fillBuilder = context.createDrawableBuilder("fill");
fillBuilder->setShader(fillShader);