From b8abb4c636d9dcb08e300e5bfe3b73f6928b38e4 Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Tue, 23 May 2017 09:53:37 -0400 Subject: [PATCH] add gm to test alpha in drawPatch Bug: skia: Change-Id: I79d0b0707b09a3eedeeaee940d6dafbbbdbe2fe2 Reviewed-on: https://skia-review.googlesource.com/17707 Reviewed-by: Mike Reed Reviewed-by: Brian Osman Commit-Queue: Mike Reed --- gm/patch.cpp | 153 ++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 94 insertions(+), 59 deletions(-) diff --git a/gm/patch.cpp b/gm/patch.cpp index 270f013..a575ea3 100644 --- a/gm/patch.cpp +++ b/gm/patch.cpp @@ -8,6 +8,7 @@ #include "gm.h" #include "SkGradientShader.h" #include "SkPatchUtils.h" +#include "SkPath.h" static sk_sp make_shader() { const SkColor colors[] = { @@ -63,65 +64,99 @@ static void draw_control_points(SkCanvas* canvas, const SkPoint cubics[12]) { canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, right + 1, paint); } -DEF_SIMPLE_GM(patch_primitive, canvas, 1500, 1100) { - SkPaint paint; - - // The order of the colors and points is clockwise starting at upper-left corner. - const SkPoint cubics[SkPatchUtils::kNumCtrlPts] = { - //top points - {100,100},{150,50},{250,150}, {300,100}, - //right points - {250, 150},{350,250}, - //bottom points - {300,300},{250,250},{150,350},{100,300}, - //left points - {50,250},{150,150} - }; - - const SkColor colors[SkPatchUtils::kNumCorners] = { - SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN - }; - const SkPoint texCoords[SkPatchUtils::kNumCorners] = { - {0.0f, 0.0f}, {100.0f, 0.0f}, {100.0f,100.0f}, {0.0f, 100.0f}} - ; - - const SkBlendMode modes[] = { - SkBlendMode::kSrc, - SkBlendMode::kDst, - SkBlendMode::kModulate, - }; - - sk_sp shader(make_shader()); - - canvas->save(); - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 4; x++) { - canvas->save(); - canvas->translate(x * 350.0f, y * 350.0f); - switch (x) { - case 0: - canvas->drawPatch(cubics, nullptr, nullptr, modes[y], paint); - break; - case 1: - canvas->drawPatch(cubics, colors, nullptr, modes[y], paint); - break; - case 2: - paint.setShader(shader); - canvas->drawPatch(cubics, nullptr, texCoords, modes[y], paint); - paint.setShader(nullptr); - break; - case 3: - paint.setShader(shader); - canvas->drawPatch(cubics, colors, texCoords, modes[y], paint); - paint.setShader(nullptr); - break; - default: - break; - } - - draw_control_points(canvas, cubics); - canvas->restore(); +// The order of the colors and points is clockwise starting at upper-left corner. +const SkPoint gCubics[SkPatchUtils::kNumCtrlPts] = { + //top points + {100,100},{150,50},{250,150}, {300,100}, + //right points + {250, 150},{350,250}, + //bottom points + {300,300},{250,250},{150,350},{100,300}, + //left points + {50,250},{150,150} +}; + +const SkPoint gTexCoords[SkPatchUtils::kNumCorners] = { + {0.0f, 0.0f}, {100.0f, 0.0f}, {100.0f,100.0f}, {0.0f, 100.0f} +}; + + +static void dopatch(SkCanvas* canvas, const SkColor colors[]) { + SkPaint paint; + + const SkBlendMode modes[] = { + SkBlendMode::kSrc, + SkBlendMode::kDst, + SkBlendMode::kModulate, + }; + + sk_sp shader(make_shader()); + + canvas->save(); + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 4; x++) { + canvas->save(); + canvas->translate(x * 350.0f, y * 350.0f); + switch (x) { + case 0: + canvas->drawPatch(gCubics, nullptr, nullptr, modes[y], paint); + break; + case 1: + canvas->drawPatch(gCubics, colors, nullptr, modes[y], paint); + break; + case 2: + paint.setShader(shader); + canvas->drawPatch(gCubics, nullptr, gTexCoords, modes[y], paint); + paint.setShader(nullptr); + break; + case 3: + paint.setShader(shader); + canvas->drawPatch(gCubics, colors, gTexCoords, modes[y], paint); + paint.setShader(nullptr); + break; + default: + break; } + + draw_control_points(canvas, gCubics); + canvas->restore(); } - canvas->restore(); + } + canvas->restore(); } + +DEF_SIMPLE_GM(patch_primitive, canvas, 1500, 1100) { + const SkColor colors[SkPatchUtils::kNumCorners] = { + SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN + }; + dopatch(canvas, colors); +} +DEF_SIMPLE_GM(patch_alpha, canvas, 1500, 1100) { + const SkColor colors[SkPatchUtils::kNumCorners] = { + SK_ColorRED, 0x0000FF00, SK_ColorBLUE, 0x00FF00FF, + }; + dopatch(canvas, colors); +} + +// These two should look the same (one patch, one simple path) +DEF_SIMPLE_GM(patch_alpha_test, canvas, 550, 250) { + canvas->translate(-75, -75); + + const SkColor colors[SkPatchUtils::kNumCorners] = { + 0x80FF0000, 0x80FF0000, 0x80FF0000, 0x80FF0000, + }; + SkPaint paint; + canvas->drawPatch(gCubics, colors, nullptr, SkBlendMode::kModulate, paint); + + canvas->translate(300, 0); + + SkPath path; + path.moveTo(gCubics[0]); + path.cubicTo(gCubics[ 1], gCubics[ 2], gCubics[ 3]); + path.cubicTo(gCubics[ 4], gCubics[ 5], gCubics[ 6]); + path.cubicTo(gCubics[ 7], gCubics[ 8], gCubics[ 9]); + path.cubicTo(gCubics[10], gCubics[11], gCubics[ 0]); + paint.setColor(colors[0]); + canvas->drawPath(path, paint); +} + -- 2.7.4