From bffa77f98cdb8971c10090c47e63a58492a20fa4 Mon Sep 17 00:00:00 2001 From: Tim Sylvester Date: Wed, 7 Jun 2023 14:11:14 -0700 Subject: [PATCH] Drawable Renderer (#1570), Fix stencil IDs on tiles passed to `renderTileClippingMasks` more than once during a frame --- src/mbgl/renderer/paint_parameters.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/mbgl/renderer/paint_parameters.cpp b/src/mbgl/renderer/paint_parameters.cpp index 3fffbe93a..63eac29ca 100644 --- a/src/mbgl/renderer/paint_parameters.cpp +++ b/src/mbgl/renderer/paint_parameters.cpp @@ -149,8 +149,15 @@ void PaintParameters::renderTileClippingMasks(TIter beg, TIter end, GetTileIDFun for (auto i = beg; i != end; ++i) { const auto& tileID = f(*i); - const int32_t stencilID = nextStencilID++; - tileClippingMaskIDs.emplace(tileID, stencilID); + const int32_t stencilID = nextStencilID + 1; + const auto result = tileClippingMaskIDs.insert(std::make_pair(tileID, stencilID)); + if (result.second) { + // inserted + nextStencilID++; + } else { + // already present + continue; + } program->draw(context, *renderPass,