diff options
author | reed <reed@google.com> | 2016-03-13 13:01:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-13 13:01:57 -0700 |
commit | 9283d20afc27571f7a871d1bd1100dd5df584941 (patch) | |
tree | 3688fa1847d47e1f2493b040bbe91594f6274cf0 /gm/gradients.cpp | |
parent | ce563cdd48ec7ce4e0420dd88760df9be9dba50c (diff) |
Revert of more shader-->sp conversions (patchset #5 id:80001 of https://codereview.chromium.org/1789633002/ )
Reason for revert:
seems to have changed pictureshadertile
Original issue's description:
> more shader-->sp conversions
>
> BUG=skia:
> GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1789633002
>
> Committed: https://skia.googlesource.com/skia/+/ce563cdd48ec7ce4e0420dd88760df9be9dba50c
TBR=fmalita@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review URL: https://codereview.chromium.org/1790353002
Diffstat (limited to 'gm/gradients.cpp')
-rw-r--r-- | gm/gradients.cpp | 172 |
1 files changed, 97 insertions, 75 deletions
diff --git a/gm/gradients.cpp b/gm/gradients.cpp index 29d0f31e96..eeb5bcb9ff 100644 --- a/gm/gradients.cpp +++ b/gm/gradients.cpp @@ -40,57 +40,59 @@ static const GradData gGradData[] = { { 4, gColorClamp, gPosClamp } }; -static sk_sp<SkShader> MakeLinear(const SkPoint pts[2], const GradData& data, - SkShader::TileMode tm, const SkMatrix& localMatrix) { - return SkGradientShader::MakeLinear(pts, data.fColors, data.fPos, data.fCount, tm, 0, - &localMatrix); +static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data, + SkShader::TileMode tm, const SkMatrix& localMatrix) { + return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos, + data.fCount, tm, 0, &localMatrix); } -static sk_sp<SkShader> MakeRadial(const SkPoint pts[2], const GradData& data, - SkShader::TileMode tm, const SkMatrix& localMatrix) { +static SkShader* MakeRadial(const SkPoint pts[2], const GradData& data, + SkShader::TileMode tm, const SkMatrix& localMatrix) { SkPoint center; center.set(SkScalarAve(pts[0].fX, pts[1].fX), SkScalarAve(pts[0].fY, pts[1].fY)); - return SkGradientShader::MakeRadial(center, center.fX, data.fColors, data.fPos, data.fCount, - tm, 0, &localMatrix); + return SkGradientShader::CreateRadial(center, center.fX, data.fColors, + data.fPos, data.fCount, tm, 0, &localMatrix); } -static sk_sp<SkShader> MakeSweep(const SkPoint pts[2], const GradData& data, - SkShader::TileMode, const SkMatrix& localMatrix) { +static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, + SkShader::TileMode, const SkMatrix& localMatrix) { SkPoint center; center.set(SkScalarAve(pts[0].fX, pts[1].fX), SkScalarAve(pts[0].fY, pts[1].fY)); - return SkGradientShader::MakeSweep(center.fX, center.fY, data.fColors, data.fPos, data.fCount, - 0, &localMatrix); + return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, + data.fPos, data.fCount, 0, &localMatrix); } -static sk_sp<SkShader> Make2Radial(const SkPoint pts[2], const GradData& data, - SkShader::TileMode tm, const SkMatrix& localMatrix) { +static SkShader* Make2Radial(const SkPoint pts[2], const GradData& data, + SkShader::TileMode tm, const SkMatrix& localMatrix) { SkPoint center0, center1; center0.set(SkScalarAve(pts[0].fX, pts[1].fX), SkScalarAve(pts[0].fY, pts[1].fY)); center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); - return SkGradientShader::MakeTwoPointConical(center1, (pts[1].fX - pts[0].fX) / 7, - center0, (pts[1].fX - pts[0].fX) / 2, - data.fColors, data.fPos, data.fCount, tm, - 0, &localMatrix); + return SkGradientShader::CreateTwoPointConical( + center1, (pts[1].fX - pts[0].fX) / 7, + center0, (pts[1].fX - pts[0].fX) / 2, + data.fColors, data.fPos, data.fCount, tm, + 0, &localMatrix); } -static sk_sp<SkShader> Make2Conical(const SkPoint pts[2], const GradData& data, +static SkShader* Make2Conical(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm, const SkMatrix& localMatrix) { SkPoint center0, center1; SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10; SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; center0.set(pts[0].fX + radius0, pts[0].fY + radius0); center1.set(pts[1].fX - radius1, pts[1].fY - radius1); - return SkGradientShader::MakeTwoPointConical(center1, radius1, center0, radius0, - data.fColors, data.fPos, - data.fCount, tm, 0, &localMatrix); + return SkGradientShader::CreateTwoPointConical(center1, radius1, + center0, radius0, + data.fColors, data.fPos, + data.fCount, tm, 0, &localMatrix); } -typedef sk_sp<SkShader> (*GradMaker)(const SkPoint pts[2], const GradData& data, - SkShader::TileMode tm, const SkMatrix& localMatrix); +typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, + SkShader::TileMode tm, const SkMatrix& localMatrix); static const GradMaker gGradMakers[] = { MakeLinear, MakeRadial, MakeSweep, Make2Radial, Make2Conical }; @@ -134,8 +136,11 @@ protected: scale.postTranslate(25.f, 25.f); } - paint.setShader(gGradMakers[j](pts, gGradData[i], tm, scale)); + SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, scale); + + paint.setShader(shader); canvas->drawRect(r, paint); + shader->unref(); canvas->translate(0, SkIntToScalar(120)); } canvas->restore(); @@ -191,8 +196,11 @@ protected: perspective.setPerspY(SkIntToScalar(i+1) / 500); perspective.setSkewX(SkIntToScalar(i+1) / 10); - paint.setShader(gGradMakers[j](pts, gGradData[i], tm, perspective)); + SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, perspective); + + paint.setShader(shader); canvas->drawRect(r, paint); + shader->unref(); canvas->translate(0, SkIntToScalar(120)); } canvas->restore(); @@ -279,11 +287,12 @@ protected: SkPoint c1; c1.iset(0, 25); SkScalar r1 = SkIntToScalar(150); - SkPaint paint; - paint.setShader(SkGradientShader::MakeTwoPointConical(c0, r0, c1, r1, colors, + SkShader* s = SkGradientShader::CreateTwoPointConical(c0, r0, c1, r1, colors, pos, SK_ARRAY_COUNT(pos), - SkShader::kClamp_TileMode)); + SkShader::kClamp_TileMode); + SkPaint paint; paint.setDither(fDither); + paint.setShader(s)->unref(); canvas->drawPaint(paint); } @@ -320,13 +329,13 @@ DEF_SIMPLE_GM(small_color_stop, canvas, 100, 150) { SkScalar r0 = 20; SkPoint c1 = { 200, 25 }; SkScalar r1 = 10; - + SkShader* s = SkGradientShader::CreateTwoPointConical(c0, r0, c1, r1, colors, + pos, SK_ARRAY_COUNT(pos), + SkShader::kClamp_TileMode); SkPaint paint; paint.setColor(SK_ColorYELLOW); canvas->drawRect(SkRect::MakeWH(100, 150), paint); - paint.setShader(SkGradientShader::MakeTwoPointConical(c0, r0, c1, r1, colors, pos, - SK_ARRAY_COUNT(pos), - SkShader::kClamp_TileMode)); + paint.setShader(s)->unref(); canvas->drawRect(SkRect::MakeWH(100, 150), paint); } @@ -359,11 +368,13 @@ protected: SkPoint center; center.iset(0, 300); canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); - paint.setShader(SkGradientShader::MakeRadial( + SkShader* shader = SkGradientShader::CreateRadial( SkPoint(center), SkIntToScalar(200), gColors, nullptr, 5, - SkShader::kClamp_TileMode)); + SkShader::kClamp_TileMode); + paint.setShader(shader); canvas->drawRect(r, paint); + shader->unref(); } private: @@ -402,9 +413,11 @@ protected: const SkScalar pos[] = { 0.0f, 0.35f, 1.0f }; - paint.setShader(SkGradientShader::MakeRadial(center, radius, colors, pos, - SK_ARRAY_COUNT(pos), - SkShader::kClamp_TileMode)); + SkShader* shader = + SkGradientShader::CreateRadial(center, radius, colors, + pos, SK_ARRAY_COUNT(pos), + SkShader::kClamp_TileMode); + paint.setShader(shader)->unref(); SkRect r = { 0, 0, SkIntToScalar(dim.width()), SkIntToScalar(dim.height()) }; @@ -451,19 +464,25 @@ protected: const uint32_t flags[] = { 0, SkGradientShader::kInterpolateColorsInPremul_Flag }; for (size_t i = 0; i < SK_ARRAY_COUNT(flags); i++) { - paint1.setShader(SkGradientShader::MakeSweep(cx, cy, sweep_colors, - nullptr, SK_ARRAY_COUNT(sweep_colors), - flags[i], nullptr)); - paint2.setShader(SkGradientShader::MakeRadial(center, radius, colors1, - nullptr, SK_ARRAY_COUNT(colors1), - SkShader::kClamp_TileMode, - flags[i], nullptr)); - paint3.setShader(SkGradientShader::MakeRadial(center, radius, colors2, - nullptr, SK_ARRAY_COUNT(colors2), - SkShader::kClamp_TileMode, - flags[i], nullptr)); + SkAutoTUnref<SkShader> sweep( + SkGradientShader::CreateSweep(cx, cy, sweep_colors, + nullptr, SK_ARRAY_COUNT(sweep_colors), + flags[i], nullptr)); + SkAutoTUnref<SkShader> radial1( + SkGradientShader::CreateRadial(center, radius, colors1, + nullptr, SK_ARRAY_COUNT(colors1), + SkShader::kClamp_TileMode, + flags[i], nullptr)); + SkAutoTUnref<SkShader> radial2( + SkGradientShader::CreateRadial(center, radius, colors2, + nullptr, SK_ARRAY_COUNT(colors2), + SkShader::kClamp_TileMode, + flags[i], nullptr)); + paint1.setShader(sweep); paint1.setDither(fDither); + paint2.setShader(radial1); paint2.setDither(fDither); + paint3.setShader(radial2); paint3.setDither(fDither); canvas->drawCircle(cx, cy, radius, paint1); @@ -500,8 +519,8 @@ protected: const SkPoint center = { 0, 0 }; const SkScalar kRadius = 3000; const SkColor gColors[] = { 0xFFFFFFFF, 0xFF000000 }; - fShader = SkGradientShader::MakeRadial(center, kRadius, gColors, nullptr, 2, - SkShader::kClamp_TileMode); + fShader.reset(SkGradientShader::CreateRadial(center, kRadius, gColors, nullptr, 2, + SkShader::kClamp_TileMode)); } void onDraw(SkCanvas* canvas) override { @@ -512,7 +531,7 @@ protected: } private: - sk_sp<SkShader> fShader; + SkAutoTUnref<SkShader> fShader; bool fDither; typedef GM INHERITED; @@ -537,8 +556,8 @@ protected: const SkColor colors[] = { SK_ColorRED, SK_ColorRED, SK_ColorWHITE, SK_ColorWHITE, SK_ColorRED }; const SkScalar pos[] = { 0, .4f, .4f, .8f, .8f, 1 }; - fShader = SkGradientShader::MakeRadial(center, kRadius, colors, pos, - SK_ARRAY_COUNT(gColors), SkShader::kClamp_TileMode); + fShader.reset(SkGradientShader::CreateRadial(center, kRadius, colors, pos, + SK_ARRAY_COUNT(gColors), SkShader::kClamp_TileMode)); } void onDraw(SkCanvas* canvas) override { @@ -550,7 +569,7 @@ protected: } private: - sk_sp<SkShader> fShader; + SkAutoTUnref<SkShader> fShader; bool fDither; typedef GM INHERITED; @@ -585,8 +604,8 @@ protected: for (int inner = 0; inner < (int) SK_ARRAY_COUNT(unitPos); ++inner) { pos[inner] = unitPos[inner] / (kMinWidth + index * kWidthBump); } - fShader[index] = SkGradientShader::MakeLinear(pts, colors, pos, - SK_ARRAY_COUNT(gColors), SkShader::kClamp_TileMode); + fShader[index].reset(SkGradientShader::CreateLinear(pts, colors, pos, + SK_ARRAY_COUNT(gColors), SkShader::kClamp_TileMode)); } } @@ -602,7 +621,7 @@ protected: } private: - sk_sp<SkShader> fShader[100]; + SkAutoTUnref<SkShader> fShader[100]; bool fDither; typedef GM INHERITED; @@ -654,12 +673,13 @@ protected: SkPaint paint; for (unsigned i = 0; i < SK_ARRAY_COUNT(configs); ++i) { SkAutoCanvasRestore acr(canvas, true); - paint.setShader(SkGradientShader::MakeLinear(configs[i].pts, colors, configs[i].pos, - kStopCount, SkShader::kClamp_TileMode, - fFlags, nullptr)); + SkAutoTUnref<SkShader> gradient( + SkGradientShader::CreateLinear(configs[i].pts, colors, configs[i].pos, kStopCount, + SkShader::kClamp_TileMode, fFlags, nullptr)); canvas->translate(kRectSize * ((i % 4) * 1.5f + 0.25f), kRectSize * ((i / 4) * 1.5f + 0.25f)); + paint.setShader(gradient); canvas->drawRect(SkRect::MakeWH(kRectSize, kRectSize), paint); } } @@ -684,27 +704,27 @@ struct GradRun { #define SIZE 121 -static sk_sp<SkShader> make_linear(const GradRun& run, SkShader::TileMode mode) { +static SkShader* make_linear(const GradRun& run, SkShader::TileMode mode) { const SkPoint pts[] { { 30, 30 }, { SIZE - 30, SIZE - 30 } }; - return SkGradientShader::MakeLinear(pts, run.fColors, run.fPos, run.fCount, mode); + return SkGradientShader::CreateLinear(pts, run.fColors, run.fPos, run.fCount, mode); } -static sk_sp<SkShader> make_radial(const GradRun& run, SkShader::TileMode mode) { +static SkShader* make_radial(const GradRun& run, SkShader::TileMode mode) { const SkScalar half = SIZE * 0.5f; - return SkGradientShader::MakeRadial({half,half}, half - 10, run.fColors, run.fPos, - run.fCount, mode); + return SkGradientShader::CreateRadial({half,half}, half - 10, + run.fColors, run.fPos, run.fCount, mode); } -static sk_sp<SkShader> make_conical(const GradRun& run, SkShader::TileMode mode) { +static SkShader* make_conical(const GradRun& run, SkShader::TileMode mode) { const SkScalar half = SIZE * 0.5f; const SkPoint center { half, half }; - return SkGradientShader::MakeTwoPointConical(center, 20, center, half - 10, - run.fColors, run.fPos, run.fCount, mode); + return SkGradientShader::CreateTwoPointConical(center, 20, center, half - 10, + run.fColors, run.fPos, run.fCount, mode); } -static sk_sp<SkShader> make_sweep(const GradRun& run, SkShader::TileMode) { +static SkShader* make_sweep(const GradRun& run, SkShader::TileMode) { const SkScalar half = SIZE * 0.5f; - return SkGradientShader::MakeSweep(half, half, run.fColors, run.fPos, run.fCount); + return SkGradientShader::CreateSweep(half, half, run.fColors, run.fPos, run.fCount); } /* @@ -742,7 +762,7 @@ DEF_SIMPLE_GM(gradients_dup_color_stops, canvas, 704, 564) { 4, }, }; - sk_sp<SkShader> (*factories[])(const GradRun&, SkShader::TileMode) { + SkShader* (*factories[])(const GradRun&, SkShader::TileMode) { make_linear, make_radial, make_conical, make_sweep }; @@ -757,7 +777,7 @@ DEF_SIMPLE_GM(gradients_dup_color_stops, canvas, 704, 564) { canvas->translate(0, dy); SkAutoCanvasRestore acr(canvas, true); for (const auto& run : runs) { - paint.setShader(factory(run, mode)); + paint.setShader(factory(run, mode))->unref(); canvas->drawRect(rect, paint); canvas->translate(dx, 0); } @@ -779,10 +799,12 @@ static void draw_many_stops(SkCanvas* canvas, uint32_t flags) { } } - SkPaint p; - p.setShader(SkGradientShader::MakeLinear( + SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear( pts, colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode, flags, nullptr)); + SkPaint p; + p.setShader(shader); + canvas->drawRect(SkRect::MakeXYWH(0, 0, 500, 500), p); } |