aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/patch.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-05-23 09:53:37 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-23 14:17:21 +0000
commitb8abb4c636d9dcb08e300e5bfe3b73f6928b38e4 (patch)
tree925e9b9afeb5147abd4c06a37e181ebd66ea3041 /gm/patch.cpp
parenteb63eb757e9f39730bc1b7a0a29d29b4d6c599fb (diff)
add gm to test alpha in drawPatch
Bug: skia: Change-Id: I79d0b0707b09a3eedeeaee940d6dafbbbdbe2fe2 Reviewed-on: https://skia-review.googlesource.com/17707 Reviewed-by: Mike Reed <reed@google.com> Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'gm/patch.cpp')
-rw-r--r--gm/patch.cpp153
1 files changed, 94 insertions, 59 deletions
diff --git a/gm/patch.cpp b/gm/patch.cpp
index 270f0137ae..a575ea3013 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<SkShader> 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<SkShader> 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<SkShader> 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);
+}
+