Clarify when oval & rrects get devolved to paths in SkGpuDevice/GrDrawContext boundary
The GrDrawContext drawOval and drawRRect methods are only called from SkGpuDevice so there is no value in delaying the conversion to a path when dashing is involved. Review URL: https://codereview.chromium.org/1470103002
This commit is contained in:
parent
b68ce74bd1
commit
514450cb69
@ -466,13 +466,7 @@ void GrDrawContext::drawRRect(const GrClip& clip,
|
||||
return;
|
||||
}
|
||||
|
||||
if (strokeInfo.isDashed()) {
|
||||
SkPath path;
|
||||
path.setIsVolatile(true);
|
||||
path.addRRect(rrect);
|
||||
this->drawPath(clip, paint, viewMatrix, path, strokeInfo);
|
||||
return;
|
||||
}
|
||||
SkASSERT(!strokeInfo.isDashed()); // this should've been devolved to a path in SkGpuDevice
|
||||
|
||||
AutoCheckFlush acf(fDrawingManager);
|
||||
|
||||
@ -545,13 +539,7 @@ void GrDrawContext::drawOval(const GrClip& clip,
|
||||
return;
|
||||
}
|
||||
|
||||
if (strokeInfo.isDashed()) {
|
||||
SkPath path;
|
||||
path.setIsVolatile(true);
|
||||
path.addOval(oval);
|
||||
this->drawPath(clip, paint, viewMatrix, path, strokeInfo);
|
||||
return;
|
||||
}
|
||||
SkASSERT(!strokeInfo.isDashed()); // this should've been devolved to a path in SkGpuDevice
|
||||
|
||||
AutoCheckFlush acf(fDrawingManager);
|
||||
|
||||
|
@ -567,19 +567,7 @@ void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect,
|
||||
|
||||
}
|
||||
|
||||
bool usePath = false;
|
||||
|
||||
if (paint.getMaskFilter()) {
|
||||
usePath = true;
|
||||
} else {
|
||||
const SkPathEffect* pe = paint.getPathEffect();
|
||||
if (pe && !strokeInfo.isDashed()) {
|
||||
usePath = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (usePath) {
|
||||
if (paint.getMaskFilter() || paint.getPathEffect()) {
|
||||
SkPath path;
|
||||
path.setIsVolatile(true);
|
||||
path.addRRect(rect);
|
||||
@ -587,6 +575,8 @@ void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect,
|
||||
return;
|
||||
}
|
||||
|
||||
SkASSERT(!strokeInfo.isDashed());
|
||||
|
||||
fDrawContext->drawRRect(fClip, grPaint, *draw.fMatrix, rect, strokeInfo);
|
||||
}
|
||||
|
||||
@ -621,33 +611,24 @@ void SkGpuDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer,
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void SkGpuDevice::drawOval(const SkDraw& draw, const SkRect& oval,
|
||||
const SkPaint& paint) {
|
||||
void SkGpuDevice::drawOval(const SkDraw& draw, const SkRect& oval, const SkPaint& paint) {
|
||||
GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawOval", fContext);
|
||||
CHECK_FOR_ANNOTATION(paint);
|
||||
CHECK_SHOULD_DRAW(draw);
|
||||
|
||||
GrStrokeInfo strokeInfo(paint);
|
||||
|
||||
bool usePath = false;
|
||||
// some basic reasons we might need to call drawPath...
|
||||
if (paint.getMaskFilter()) {
|
||||
// The RRect path can handle special case blurring
|
||||
SkRRect rr = SkRRect::MakeOval(oval);
|
||||
return this->drawRRect(draw, rr, paint);
|
||||
} else {
|
||||
const SkPathEffect* pe = paint.getPathEffect();
|
||||
if (pe && !strokeInfo.isDashed()) {
|
||||
usePath = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (usePath) {
|
||||
// Presumably the path effect warps this to something other than an oval
|
||||
if (paint.getPathEffect()) {
|
||||
SkPath path;
|
||||
path.setIsVolatile(true);
|
||||
path.addOval(oval);
|
||||
this->drawPath(draw, path, paint, nullptr, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (paint.getMaskFilter()) {
|
||||
// The RRect path can handle special case blurring
|
||||
SkRRect rr = SkRRect::MakeOval(oval);
|
||||
return this->drawRRect(draw, rr, paint);
|
||||
}
|
||||
|
||||
GrPaint grPaint;
|
||||
@ -655,6 +636,9 @@ void SkGpuDevice::drawOval(const SkDraw& draw, const SkRect& oval,
|
||||
return;
|
||||
}
|
||||
|
||||
GrStrokeInfo strokeInfo(paint);
|
||||
SkASSERT(!strokeInfo.isDashed());
|
||||
|
||||
fDrawContext->drawOval(fClip, grPaint, *draw.fMatrix, oval, strokeInfo);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user