From 0f850312ea48d0bf5224963347ba15e96606830b Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Fri, 21 Sep 2012 22:03:44 +0200 Subject: [PATCH] Canvas: Support for pseudo non-zero fillrule --- src/Canvas/ShivaVG/src/shPipeline.c | 16 ++++++++++++++-- src/Canvas/elements/path.cxx | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Canvas/ShivaVG/src/shPipeline.c b/src/Canvas/ShivaVG/src/shPipeline.c index 1e07bc56a..005c9c690 100644 --- a/src/Canvas/ShivaVG/src/shPipeline.c +++ b/src/Canvas/ShivaVG/src/shPipeline.c @@ -332,8 +332,20 @@ VG_API_CALL void vgDrawPath(VGPath path, VGbitfield paintModes) /* Tesselate into stencil */ glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0); - glStencilOp(GL_INVERT, GL_INVERT, GL_INVERT); + + if( context->fillRule == VG_EVEN_ODD ) + { + glStencilFunc(GL_ALWAYS, 0, 0); + glStencilOp(GL_INVERT, GL_INVERT, GL_INVERT); + } + else + { + // pseudo non-zero fill rule. Fill everything at least covered once, don't + // care for possible decrements. + // TODO implement real non-zero fill-rule + glStencilFunc(GL_ALWAYS, 1, 1); + glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); + } glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); shDrawVertices(p, GL_TRIANGLE_FAN); diff --git a/src/Canvas/elements/path.cxx b/src/Canvas/elements/path.cxx index f7c9ddafe..a6cc76682 100644 --- a/src/Canvas/elements/path.cxx +++ b/src/Canvas/elements/path.cxx @@ -210,7 +210,7 @@ namespace canvas { vgSetPaint(_paint_fill, VG_FILL_PATH); - vgSetf(VG_FILL_RULE, VG_NON_ZERO); // TODO make user configurable + vgSeti(VG_FILL_RULE, VG_NON_ZERO); // TODO make user configurable } // And finally draw the path -- 2.39.5