From b43177639c391b44b977a2bcf130a406f5205b08 Mon Sep 17 00:00:00 2001 From: Sergii Liebodkin Date: Mon, 3 Mar 2025 12:20:58 +0000 Subject: [PATCH] gl_engine: introduce the stroke clipper See Clipping example Issue: https://github.com/thorvg/thorvg/issues/3063 --- src/renderer/gl_engine/tvgGlRenderer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index 0f50489e..ff8a0285 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -477,7 +477,8 @@ void GlRenderer::drawClip(Array& clips) clipTask->setDrawDepth(clipDepths[i]); - sdata->geometry.draw(clipTask, &mGpuBuffer, RenderUpdateFlag::Path); + auto flag = (sdata->geometry.stroke.vertex.count > 0) ? RenderUpdateFlag::Stroke : RenderUpdateFlag::Path; + sdata->geometry.draw(clipTask, &mGpuBuffer, flag); auto bbox = sdata->geometry.viewport; @@ -1226,7 +1227,7 @@ RenderData GlRenderer::prepare(const RenderShape& rshape, RenderData data, const } if (clipper) { - sdata->updateFlag = RenderUpdateFlag::Path; + sdata->updateFlag = (rshape.stroke && (rshape.stroke->width > 0)) ? RenderUpdateFlag::Stroke : RenderUpdateFlag::Path; } else { if (alphaF) sdata->updateFlag = static_cast(RenderUpdateFlag::Color | sdata->updateFlag); if (rshape.fill) sdata->updateFlag = static_cast(RenderUpdateFlag::Gradient | sdata->updateFlag);