aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Yuqian Li <liyuqian@google.com>2017-11-27 12:01:49 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-27 17:53:07 +0000
commit57899c7e9f8d703dc0c39b1fc693b1938c487ece (patch)
treeddaf2569611ed59339bfe6d8d37ba43fe5dcfa00
parentc34aa9d51a6d7b0426436e32750228964274f754 (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.h7
-rw-r--r--src/core/SkScan_AntiPath.cpp13
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?
}
}