diff options
author | Yuqian Li <liyuqian@google.com> | 2017-11-27 12:01:49 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-11-27 17:53:07 +0000 |
commit | 57899c7e9f8d703dc0c39b1fc693b1938c487ece (patch) | |
tree | ddaf2569611ed59339bfe6d8d37ba43fe5dcfa00 | |
parent | c34aa9d51a6d7b0426436e32750228964274f754 (diff) |
Add forceDAA parameter to AntiFillPath
Threaded backend will need this to always fill path in DAA.
Bug: skia:
Change-Id: Ifbfb0137b89eb71b7c2a2722aee1dad196a52553
Reviewed-on: https://skia-review.googlesource.com/76120
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Yuqian Li <liyuqian@google.com>
-rw-r--r-- | src/core/SkScan.h | 7 | ||||
-rw-r--r-- | src/core/SkScan_AntiPath.cpp | 13 |
2 files changed, 10 insertions, 10 deletions
diff --git a/src/core/SkScan.h b/src/core/SkScan.h index 2212d0de5b..0c5be3be1c 100644 --- a/src/core/SkScan.h +++ b/src/core/SkScan.h @@ -52,7 +52,7 @@ public: static void AntiFillRect(const SkRect&, const SkRasterClip&, SkBlitter*); static void AntiFillXRect(const SkXRect&, const SkRasterClip&, SkBlitter*); static void FillPath(const SkPath&, const SkRasterClip&, SkBlitter*); - static void AntiFillPath(const SkPath&, const SkRasterClip&, SkBlitter*); + static void AntiFillPath(const SkPath&, const SkRasterClip&, SkBlitter*, bool forceDAA); static void FrameRect(const SkRect&, const SkPoint& strokeSize, const SkRasterClip&, SkBlitter*); static void AntiFrameRect(const SkRect&, const SkPoint& strokeSize, @@ -72,6 +72,9 @@ public: // Needed by do_fill_path in SkScanPriv.h static void FillPath(const SkPath&, const SkRegion& clip, SkBlitter*); + static void AntiFillPath(const SkPath& path, const SkRasterClip& rc, SkBlitter* blitter) { + AntiFillPath(path, rc, blitter, false); + } private: friend class SkAAClip; friend class SkRegion; @@ -82,7 +85,7 @@ private: static void AntiFillRect(const SkRect&, const SkRegion* clip, SkBlitter*); static void AntiFillXRect(const SkXRect&, const SkRegion*, SkBlitter*); static void AntiFillPath(const SkPath&, const SkRegion& clip, SkBlitter*, - bool forceRLE = false); + bool forceRLE = false, bool forceDAA = false); static void FillTriangle(const SkPoint pts[], const SkRegion*, SkBlitter*); static void AntiFrameRect(const SkRect&, const SkPoint& strokeSize, diff --git a/src/core/SkScan_AntiPath.cpp b/src/core/SkScan_AntiPath.cpp index 8f20ef6eb9..93ccf87fce 100644 --- a/src/core/SkScan_AntiPath.cpp +++ b/src/core/SkScan_AntiPath.cpp @@ -673,7 +673,7 @@ static bool safeRoundOut(const SkRect& src, SkIRect* dst, int32_t maxInt) { } void SkScan::AntiFillPath(const SkPath& path, const SkRegion& origClip, - SkBlitter* blitter, bool forceRLE) { + SkBlitter* blitter, bool forceRLE, bool forceDAA) { if (origClip.isEmpty()) { return; } @@ -750,7 +750,7 @@ void SkScan::AntiFillPath(const SkPath& path, const SkRegion& origClip, SkASSERT(SkIntToScalar(ir.fTop) <= path.getBounds().fTop); - if (ShouldUseDAA(path)) { + if (forceDAA || ShouldUseDAA(path)) { SkScan::DAAFillPath(path, blitter, ir, clipRgn->getBounds(), clipper.getClipRect() == nullptr, forceRLE); } else if (ShouldUseAAA(path)) { @@ -791,22 +791,19 @@ void SkScan::FillPath(const SkPath& path, const SkRasterClip& clip, } void SkScan::AntiFillPath(const SkPath& path, const SkRasterClip& clip, - SkBlitter* blitter) { + SkBlitter* blitter, bool forceDAA) { if (clip.isEmpty()) { return; } - using FillPathProc = void(*)(const SkPath&, const SkRegion&, SkBlitter*, bool); - FillPathProc fillPathProc = &SkScan::AntiFillPath; - if (clip.isBW()) { - fillPathProc(path, clip.bwRgn(), blitter, false); + AntiFillPath(path, clip.bwRgn(), blitter, false, forceDAA); } else { SkRegion tmp; SkAAClipBlitter aaBlitter; tmp.setRect(clip.getBounds()); aaBlitter.init(blitter, &clip.aaRgn()); - fillPathProc(path, tmp, &aaBlitter, true); // SkAAClipBlitter can blitMask, why forceRLE? + AntiFillPath(path, tmp, &aaBlitter, true, forceDAA); // SkAAClipBlitter can blitMask, why forceRLE? } } |