increase subdivision for very large cubics

Allow 512 subdivisions for hairline cubics instead of 64
to allow very large cubics to be properly approximated with
lines.

R=reed@google.com
BUG=339297
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1674813002

Review URL: https://codereview.chromium.org/1674813002
This commit is contained in:
caryclark 2016-02-05 13:59:31 -08:00 committed by Commit bot
parent 2fba809120
commit 52b64619d9
2 changed files with 27 additions and 1 deletions

View File

@ -331,3 +331,29 @@ DEF_SIMPLE_GM_BG_NAME(strokefill, canvas, 640, 480, SK_ColorWHITE,
path4.moveTo(0, 0); // test for crbug.com/247770
canvas->drawPath(path4, paint);
}
DEF_SIMPLE_GM(bug339297, canvas, 640, 480) {
SkPath path;
path.moveTo(-469515, -10354890);
path.cubicTo(771919.62f, -10411179, 2013360.1f, -10243774, 3195542.8f, -9860664);
path.lineTo(3195550, -9860655);
path.lineTo(3195539, -9860652);
path.lineTo(3195539, -9860652);
path.lineTo(3195539, -9860652);
path.cubicTo(2013358.1f, -10243761, 771919.25f, -10411166, -469513.84f, -10354877);
path.lineTo(-469515, -10354890);
path.close();
canvas->translate(258, 10365663);
SkPaint paint;
paint.setAntiAlias(true);
paint.setColor(SK_ColorBLACK);
paint.setStyle(SkPaint::kFill_Style);
canvas->drawPath(path, paint);
paint.setColor(SK_ColorRED);
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(1);
canvas->drawPath(path, paint);
}

View File

@ -192,7 +192,7 @@ void SkScan::HairRect(const SkRect& rect, const SkRasterClip& clip,
#include "SkGeometry.h"
#include "SkNx.h"
#define kMaxCubicSubdivideLevel 6
#define kMaxCubicSubdivideLevel 9
#define kMaxQuadSubdivideLevel 5
static int compute_int_quad_dist(const SkPoint pts[3]) {