From cacd7d442a2284738aa617e98d40209e8c48a707 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Tue, 8 Jul 2025 10:43:49 +0200 Subject: [PATCH] renderer: fix render region for multiple masks Previously, when more than two masks were applied, the render region only took the first added mask into account. @Issue: https://github.com/thorvg/thorvg/issues/3600 --- src/renderer/tvgPaint.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/renderer/tvgPaint.cpp b/src/renderer/tvgPaint.cpp index 3a0b4de2..b27944e1 100644 --- a/src/renderer/tvgPaint.cpp +++ b/src/renderer/tvgPaint.cpp @@ -214,8 +214,12 @@ bool Paint::Impl::render(RenderMethod* renderer) RenderRegion region; PAINT_METHOD(region, bounds(renderer)); - if (MASK_REGION_MERGING(compData->method)) region.add(P(compData->target)->bounds(renderer)); - if (region.w == 0 || region.h == 0) return true; + auto cData = compData; + while (cData) { + if (MASK_REGION_MERGING(cData->method)) region.add(P(cData->target)->bounds(renderer)); + if (region.w == 0 || region.h == 0) return true; + cData = P(cData->target)->compData; + } cmp = renderer->target(region, COMPOSITE_TO_COLORSPACE(renderer, compData->method), CompositionFlag::Masking); if (renderer->beginComposite(cmp, CompositeMethod::None, 255)) { compData->target->pImpl->render(renderer);