Rearrange GRTC::drawPath()

Check for rrects first. Don't recreate path if shape simplified it to check
for nested rects.

Change-Id: I3c82c4269abf8b579ba7e92be76a33c956a01602
Reviewed-on: https://skia-review.googlesource.com/89182
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This commit is contained in:
Brian Salomon 2017-12-22 11:25:52 -05:00 committed by Skia Commit-Bot
parent d23c7c45dc
commit 40b77a6744

View File

@ -1491,13 +1491,14 @@ void GrRenderTargetContext::drawPath(const GrClip& clip,
GrPaint&& paint,
GrAA aa,
const SkMatrix& viewMatrix,
const SkPath& originalPath,
const SkPath& path,
const GrStyle& style) {
ASSERT_SINGLE_OWNER
RETURN_IF_ABANDONED
SkDEBUGCODE(this->validate();)
GR_CREATE_TRACE_MARKER_CONTEXT("GrRenderTargetContextPriv", "drawPath", fContext);
GrShape shape(originalPath, style);
GrShape shape(path, style);
if (shape.isEmpty()) {
if (shape.inverseFilled()) {
this->drawPaint(clip, std::move(paint), viewMatrix);
@ -1507,27 +1508,6 @@ void GrRenderTargetContext::drawPath(const GrClip& clip,
AutoCheckFlush acf(this->drawingManager());
GrAAType aaType = this->chooseAAType(aa, GrAllowMixedSamples::kNo);
if (GrAAType::kCoverage == aaType) {
// TODO: Make GrShape check for nested rects.
SkPath path;
shape.asPath(&path);
SkRect rects[2];
if (shape.style().isSimpleFill() && fills_as_nested_rects(viewMatrix, path, rects)) {
// Concave AA paths are expensive - try to avoid them for special cases
SkRect rects[2];
if (fills_as_nested_rects(viewMatrix, path, rects)) {
std::unique_ptr<GrDrawOp> op =
GrRectOpFactory::MakeAAFillNestedRects(std::move(paint), viewMatrix, rects);
if (op) {
this->addDrawOp(clip, std::move(op));
}
// A null return indicates that there is nothing to draw in this case.
return;
}
}
}
if (!shape.style().hasPathEffect()) {
SkRRect rrect;
// We can ignore the starting point and direction since there is no path effect.
@ -1546,6 +1526,25 @@ void GrRenderTargetContext::drawPath(const GrClip& clip,
}
}
GrAAType aaType = this->chooseAAType(aa, GrAllowMixedSamples::kNo);
if (GrAAType::kCoverage == aaType) {
// TODO: Make GrShape check for nested rects.
SkRect rects[2];
if (shape.style().isSimpleFill() && fills_as_nested_rects(viewMatrix, path, rects)) {
// Concave AA paths are expensive - try to avoid them for special cases
SkRect rects[2];
if (fills_as_nested_rects(viewMatrix, path, rects)) {
std::unique_ptr<GrDrawOp> op =
GrRectOpFactory::MakeAAFillNestedRects(std::move(paint), viewMatrix, rects);
if (op) {
this->addDrawOp(clip, std::move(op));
}
// A null return indicates that there is nothing to draw in this case.
return;
}
}
}
this->drawShapeUsingPathRenderer(clip, std::move(paint), aa, viewMatrix, shape);
}