From 7bb701b22eef1e3b7b1fd0237c253d5709c7bb56 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 12c07a93..4eb604f9 100644 --- a/src/renderer/tvgPaint.cpp +++ b/src/renderer/tvgPaint.cpp @@ -184,8 +184,12 @@ bool Paint::Impl::render(RenderMethod* renderer) RenderRegion region; PAINT_METHOD(region, bounds(renderer)); - if (MASK_REGION_MERGING(maskData->method)) region.add(PAINT(maskData->target)->bounds(renderer)); - if (region.invalid()) return true; + auto mData = maskData; + while (mData) { + if (MASK_REGION_MERGING(mData->method)) region.add(PAINT(mData->target)->bounds(renderer)); + if (region.invalid()) return true; + mData = PAINT(mData->target)->maskData; + } cmp = renderer->target(region, MASK_TO_COLORSPACE(renderer, maskData->method), CompositionFlag::Masking); if (renderer->beginComposite(cmp, MaskMethod::None, 255)) { maskData->target->pImpl->render(renderer);