mirror of
https://github.com/thorvg/thorvg.git
synced 2025-07-26 08:09:14 +00:00
gl_engine: add support for stroke/fill ordering
This commit is contained in:
parent
89e98b6fcb
commit
8f7103e109
1 changed files with 21 additions and 18 deletions
|
@ -1234,33 +1234,36 @@ bool GlRenderer::renderShape(RenderData data)
|
||||||
|
|
||||||
if (flags & (RenderUpdateFlag::Stroke | RenderUpdateFlag::GradientStroke)) drawDepth2 = currentPass()->nextDrawDepth();
|
if (flags & (RenderUpdateFlag::Stroke | RenderUpdateFlag::GradientStroke)) drawDepth2 = currentPass()->nextDrawDepth();
|
||||||
|
|
||||||
|
|
||||||
if (!sdata->clips.empty()) drawClip(sdata->clips);
|
if (!sdata->clips.empty()) drawClip(sdata->clips);
|
||||||
|
|
||||||
if (flags & (RenderUpdateFlag::Color | RenderUpdateFlag::Gradient))
|
auto processFill = [&]() {
|
||||||
{
|
if (flags & (RenderUpdateFlag::Color | RenderUpdateFlag::Gradient)) {
|
||||||
auto gradient = sdata->rshape->fill;
|
if (const auto& gradient = sdata->rshape->fill) {
|
||||||
if (gradient) drawPrimitive(*sdata, gradient, RenderUpdateFlag::Gradient, drawDepth1);
|
drawPrimitive(*sdata, gradient, RenderUpdateFlag::Gradient, drawDepth1);
|
||||||
else {
|
} else if (sdata->rshape->color[3] > 0) {
|
||||||
sdata->rshape->fillColor(&r, &g, &b, &a);
|
sdata->rshape->fillColor(&r, &g, &b, &a);
|
||||||
if (a > 0)
|
|
||||||
{
|
|
||||||
drawPrimitive(*sdata, r, g, b, a, RenderUpdateFlag::Color, drawDepth1);
|
drawPrimitive(*sdata, r, g, b, a, RenderUpdateFlag::Color, drawDepth1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
if (flags & (RenderUpdateFlag::Stroke | RenderUpdateFlag::GradientStroke))
|
auto processStroke = [&]() {
|
||||||
{
|
if (!sdata->rshape->stroke) return;
|
||||||
auto gradient = sdata->rshape->strokeFill();
|
if (flags & (RenderUpdateFlag::Stroke | RenderUpdateFlag::GradientStroke)) {
|
||||||
if (gradient) {
|
if (const auto& gradient = sdata->rshape->strokeFill()) {
|
||||||
drawPrimitive(*sdata, gradient, RenderUpdateFlag::GradientStroke, drawDepth2);
|
drawPrimitive(*sdata, gradient, RenderUpdateFlag::GradientStroke, drawDepth2);
|
||||||
} else {
|
} else if (sdata->rshape->strokeColor(&r, &g, &b, &a) && a > 0) {
|
||||||
if (sdata->rshape->strokeColor(&r, &g, &b, &a) && a > 0)
|
|
||||||
{
|
|
||||||
drawPrimitive(*sdata, r, g, b, a, RenderUpdateFlag::Stroke, drawDepth2);
|
drawPrimitive(*sdata, r, g, b, a, RenderUpdateFlag::Stroke, drawDepth2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (sdata->rshape->stroke && sdata->rshape->stroke->strokeFirst) {
|
||||||
|
processStroke();
|
||||||
|
processFill();
|
||||||
|
} else {
|
||||||
|
processFill();
|
||||||
|
processStroke();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue