diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index fa88ac55..002bd408 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -1093,24 +1093,35 @@ bool GlRenderer::renderShape(RenderData data) if (flags & (RenderUpdateFlag::Stroke | RenderUpdateFlag::GradientStroke)) drawDepth2 = currentPass()->nextDrawDepth(); - if (!sdata->clips.empty()) drawClip(sdata->clips); - if (flags & (RenderUpdateFlag::Color | RenderUpdateFlag::Gradient)) - { - auto gradient = sdata->rshape->fill; - if (gradient) drawPrimitive(*sdata, gradient, RenderUpdateFlag::Gradient, drawDepth1); - else if (sdata->rshape->color.a > 0) drawPrimitive(*sdata, sdata->rshape->color, RenderUpdateFlag::Color, drawDepth1); - } - - if (flags & (RenderUpdateFlag::Stroke | RenderUpdateFlag::GradientStroke)) - { - auto gradient = sdata->rshape->strokeFill(); - if (gradient) { - drawPrimitive(*sdata, gradient, RenderUpdateFlag::GradientStroke, drawDepth2); - } else if (sdata->rshape->stroke && sdata->rshape->stroke->color.a > 0) { - drawPrimitive(*sdata, sdata->rshape->stroke->color, RenderUpdateFlag::Stroke, drawDepth2); + auto processFill = [&]() { + if (flags & (RenderUpdateFlag::Color | RenderUpdateFlag::Gradient)) { + if (const auto& gradient = sdata->rshape->fill) { + drawPrimitive(*sdata, gradient, RenderUpdateFlag::Gradient, drawDepth1); + } else if (sdata->rshape->color.a > 0) { + drawPrimitive(*sdata, sdata->rshape->color, RenderUpdateFlag::Color, drawDepth1); + } } + }; + + auto processStroke = [&]() { + if (!sdata->rshape->stroke) return; + if (flags & (RenderUpdateFlag::Stroke | RenderUpdateFlag::GradientStroke)) { + if (const auto& gradient = sdata->rshape->strokeFill()) { + drawPrimitive(*sdata, gradient, RenderUpdateFlag::GradientStroke, drawDepth2); + } else if (sdata->rshape->stroke->color.a > 0) { + drawPrimitive(*sdata, sdata->rshape->stroke->color, RenderUpdateFlag::Stroke, drawDepth2); + } + } + }; + + if (sdata->rshape->stroke && sdata->rshape->stroke->strokeFirst) { + processStroke(); + processFill(); + } else { + processFill(); + processStroke(); } return true;