diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-10-09 15:14:18 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-10-09 15:14:18 +0000 |
commit | 32184d81629e39809bb9e915286d8fe971a8ed68 (patch) | |
tree | 51daf51f89699ddc902212654b473f09f1875e41 /src/gpu/GrStencilAndCoverPathRenderer.cpp | |
parent | 598cf5d3cfc428108cf21ab45d73a995d7e5c2a8 (diff) |
Implement stroking a path with nv_path_rendering
Initialize the path stroke properties in the GrGLPath constructor.
Use StencilStrokePath and CoverStrokePath to stroke the path.
The order of the GL calls is:
1. StencilFill, if needed
2. StencilStroke, if needed
2a. CoverStroke, if stroke was applied
2b. CoverFill, if stroke was not applied
The reason for not pairing StencilFill + CoverFill, StencilStroke +
CoverStroke is that Skia API does not allow separate fill and stroke
color within one call. Covering the stroke bounding box should also
cover the fill bounding box.
Causes different rendering in gm/dashcubics due to different rendering
algorithm. (?) (TODO: this should be resolved somehow.)
R=bsalomon@google.com, markkilgard@gmail.com, cdalton@nvidia.com
Author: kkinnunen@nvidia.com
Review URL: https://codereview.chromium.org/23440049
git-svn-id: http://skia.googlecode.com/svn/trunk@11672 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/GrStencilAndCoverPathRenderer.cpp')
-rw-r--r-- | src/gpu/GrStencilAndCoverPathRenderer.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/gpu/GrStencilAndCoverPathRenderer.cpp b/src/gpu/GrStencilAndCoverPathRenderer.cpp index ef3b953861..0271b22a9a 100644 --- a/src/gpu/GrStencilAndCoverPathRenderer.cpp +++ b/src/gpu/GrStencilAndCoverPathRenderer.cpp @@ -38,7 +38,7 @@ bool GrStencilAndCoverPathRenderer::canDrawPath(const SkPath& path, const SkStrokeRec& stroke, const GrDrawTarget* target, bool antiAlias) const { - return stroke.isFillStyle() && + return !stroke.isHairlineStyle() && !antiAlias && // doesn't do per-path AA, relies on the target having MSAA NULL != target->getDrawState().getRenderTarget()->getStencilBuffer() && target->getDrawState().getStencil().isDisabled(); @@ -55,8 +55,8 @@ void GrStencilAndCoverPathRenderer::onStencilPath(const SkPath& path, const SkStrokeRec& stroke, GrDrawTarget* target) { SkASSERT(!path.isInverseFillType()); - SkAutoTUnref<GrPath> p(fGpu->createPath(path)); - target->stencilPath(p, stroke, path.getFillType()); + SkAutoTUnref<GrPath> p(fGpu->createPath(path, stroke)); + target->stencilPath(p, path.getFillType()); } bool GrStencilAndCoverPathRenderer::onDrawPath(const SkPath& path, @@ -69,7 +69,7 @@ bool GrStencilAndCoverPathRenderer::onDrawPath(const SkPath& path, GrDrawState* drawState = target->drawState(); SkASSERT(drawState->getStencil().isDisabled()); - SkAutoTUnref<GrPath> p(fGpu->createPath(path)); + SkAutoTUnref<GrPath> p(fGpu->createPath(path, stroke)); if (path.isInverseFillType()) { GR_STATIC_CONST_SAME_STENCIL(kInvertedStencilPass, @@ -96,7 +96,7 @@ bool GrStencilAndCoverPathRenderer::onDrawPath(const SkPath& path, *drawState->stencil() = kStencilPass; } - target->fillPath(p, stroke, path.getFillType()); + target->drawPath(p, path.getFillType()); target->drawState()->stencil()->setDisabled(); return true; |