add gm to test alpha in drawPatch
authorMike Reed <reed@google.com>
Tue, 23 May 2017 13:53:37 +0000 (09:53 -0400)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Tue, 23 May 2017 14:17:21 +0000 (14:17 +0000)
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>

gm/patch.cpp

index 270f013..a575ea3 100644 (file)
@@ -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);
+}
+