Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: gm/patch.cpp

Issue 429343004: Stopped skipping tests in dm of SkPatch (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Moved DRAW_PATCH DrawType to the last position Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | include/core/SkCanvas.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 // This test only works with the GPU backend. 9 // This test only works with the GPU backend.
10 10
11 #include "gm.h" 11 #include "gm.h"
12 12
13 #if SK_SUPPORT_GPU 13 #if SK_SUPPORT_GPU
14 14
15 #include "GrContext.h" 15 #include "GrContext.h"
16 #include "GrTest.h" 16 #include "GrTest.h"
17 #include "SkPatch.h" 17 #include "SkPatch.h"
18 18
19 static void draw_control_points(SkCanvas* canvas, SkPatch& patch, SkPaint& paint ) { 19 static void draw_control_points(SkCanvas* canvas, const SkPatch& patch) {
20 //draw control points 20 //draw control points
21 SkPaint copy(paint); 21 SkPaint paint;
22 SkPoint bottom[4]; 22 SkPoint bottom[SkPatch::kNumPtsCubic];
23 patch.getBottomPoints(bottom); 23 patch.getBottomPoints(bottom);
24 SkPoint top[4]; 24 SkPoint top[SkPatch::kNumPtsCubic];
25 patch.getTopPoints(top); 25 patch.getTopPoints(top);
26 SkPoint left[4]; 26 SkPoint left[SkPatch::kNumPtsCubic];
27 patch.getLeftPoints(left); 27 patch.getLeftPoints(left);
28 SkPoint right[4]; 28 SkPoint right[SkPatch::kNumPtsCubic];
29 patch.getRightPoints(right); 29 patch.getRightPoints(right);
30 30
31 copy.setColor(SK_ColorBLACK); 31 paint.setColor(SK_ColorBLACK);
32 copy.setStrokeWidth(0.5); 32 paint.setStrokeWidth(0.5);
33 SkPoint corners[4] = { bottom[0], bottom[3], top[0], top[3] }; 33 SkPoint corners[4] = { bottom[0], bottom[3], top[0], top[3] };
34 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, bottom, copy); 34 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, bottom, paint);
35 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, bottom+1, copy); 35 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, bottom+1, paint);
36 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, top, copy); 36 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, top, paint);
37 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, left, copy); 37 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, left, paint);
38 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, right, copy); 38 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, right, paint);
39 39
40 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, top+1, copy); 40 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, top+1, paint);
41 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, left+1, copy); 41 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, left+1, paint);
42 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, right+1, copy); 42 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, right+1, paint);
43 43
44 copy.setStrokeWidth(2); 44 paint.setStrokeWidth(2);
45 45
46 copy.setColor(SK_ColorRED); 46 paint.setColor(SK_ColorRED);
47 canvas->drawPoints(SkCanvas::kPoints_PointMode, 4, corners, copy); 47 canvas->drawPoints(SkCanvas::kPoints_PointMode, 4, corners, paint);
48 48
49 copy.setColor(SK_ColorBLUE); 49 paint.setColor(SK_ColorBLUE);
50 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, bottom+1, copy); 50 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, bottom+1, paint);
51 51
52 copy.setColor(SK_ColorCYAN); 52 paint.setColor(SK_ColorCYAN);
53 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, top+1, copy); 53 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, top+1, paint);
54 54
55 copy.setColor(SK_ColorYELLOW); 55 paint.setColor(SK_ColorYELLOW);
56 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, left+1, copy); 56 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, left+1, paint);
57 57
58 copy.setColor(SK_ColorGREEN); 58 paint.setColor(SK_ColorGREEN);
59 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, right+1, copy); 59 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, right+1, paint);
60 }
61
62 static void draw_random_patch(SkPoint points[12], SkColor colors[4], SkCanvas* c anvas,
63 SkPaint& paint, SkRandom* rnd) {
64 SkPoint ptsCpy[12];
65 memcpy(ptsCpy, points, 12 * sizeof(SkPoint));
66 for (int i = 0; i < 5; i++) {
67 int index = rnd->nextRangeU(0, 11);
68 SkScalar dx = rnd->nextRangeScalar(-50, 50), dy = rnd->nextRangeScalar(- 50, 50);
69 ptsCpy[index].offset(dx, dy);
70 }
71 SkPatch patch(ptsCpy, colors);
72 canvas->drawPatch(patch, paint);
73 draw_control_points(canvas, patch, paint);
74 } 60 }
75 61
76 namespace skiagm { 62 namespace skiagm {
77 /** 63 /**
78 * This GM draws a SkPatch. 64 * This GM draws a SkPatch.
79 */ 65 */
80 class SkPatchGM : public GM { 66 class SkPatchGM : public GM {
81 67
82 public: 68 public:
83 SkPatchGM() { 69 SkPatchGM() {
84 this->setBGColor(0xFFFFFFFF); 70 this->setBGColor(0xFFFFFFFF);
85 } 71 }
86 72
87 protected: 73 protected:
88 virtual SkString onShortName() SK_OVERRIDE { 74 virtual SkString onShortName() SK_OVERRIDE {
89 return SkString("patch_primitive"); 75 return SkString("patch_primitive");
90 } 76 }
91 77
92 virtual SkISize onISize() SK_OVERRIDE { 78 virtual SkISize onISize() SK_OVERRIDE {
93 return SkISize::Make(800, 800); 79 return SkISize::Make(800, 800);
94 } 80 }
95 81
96 virtual uint32_t onGetFlags() const SK_OVERRIDE { 82 virtual uint32_t onGetFlags() const SK_OVERRIDE {
97 return kSkipTiled_Flag | kSkipPipe_Flag | kSkipPicture_Flag; 83 return kSkipTiled_Flag;
98 } 84 }
99 85
100 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 86 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
101 87
102 SkPaint paint; 88 SkPaint paint;
103 SkColor colors[4] = { 89
90 // The order of the colors and points is clockwise starting at upper-lef t corner.
91 SkColor colors[SkPatch::kNumColors] = {
104 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN 92 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN
105 }; 93 };
106 SkPoint points[12] = { 94 SkPoint points[SkPatch::kNumCtrlPts] = {
95 //top points
107 {50,50},{75,20},{125,80}, {150,50}, 96 {50,50},{75,20},{125,80}, {150,50},
108 {120,75},{180,125},{150,150}, 97 //right points
109 {125,120},{75,180},{50,150}, 98 {120,75},{180,125},
99 //bottom points
100 {150,150},{125,120},{75,180},{50,150},
101 //left points
110 {20,125},{80,75} 102 {20,125},{80,75}
111 }; 103 };
112 104
113 SkRandom rnd; 105 SkPatch patch(points, colors);
114 SkScalar scale = 0.5f; 106 static const SkScalar kScale = 0.5f;
107 canvas->translate(100, 100);
115 canvas->save(); 108 canvas->save();
116 for (SkScalar x = 0; x < 4; x++) { 109 for (SkScalar x = 0; x < 4; x++) {
117 canvas->save(); 110 canvas->save();
118 canvas->scale(scale * (x + 1), scale * (x + 1)); 111 canvas->scale(kScale * (x + 1), kScale * (x + 1));
119 canvas->translate(x * 100, 0); 112 canvas->translate(x * 100, 0);
120 draw_random_patch(points, colors, canvas, paint, &rnd); 113 canvas->drawPatch(patch, paint);
114 draw_control_points(canvas, patch);
121 canvas->restore(); 115 canvas->restore();
122 } 116 }
117
123 canvas->translate(0, 270); 118 canvas->translate(0, 270);
124 SkScalar skew = 0.1f; 119
120 static const SkScalar kSkew = 0.2f;
125 for (SkScalar x = 0; x < 4; x++) { 121 for (SkScalar x = 0; x < 4; x++) {
126 canvas->save(); 122 canvas->save();
127 canvas->scale(scale * (x + 1), scale * (x + 1)); 123 canvas->scale(kScale * (x + 1), kScale * (x + 1));
128 canvas->skew(skew * (x + 1), skew * (x + 1));
129 canvas->translate(x * 100, 0); 124 canvas->translate(x * 100, 0);
130 draw_random_patch(points, colors, canvas, paint, &rnd); 125 canvas->skew(kSkew * (x + 1), kSkew * (x + 1));
126 canvas->drawPatch(patch, paint);
127 draw_control_points(canvas, patch);
131 canvas->restore(); 128 canvas->restore();
132 } 129 }
133 canvas->restore(); 130 canvas->restore();
134 } 131 }
135 132
136 private: 133 private:
137 typedef GM INHERITED; 134 typedef GM INHERITED;
138 }; 135 };
139 136
140 DEF_GM(return SkNEW(SkPatchGM); ) 137 DEF_GM(return SkNEW(SkPatchGM); )
141 138
142 } 139 }
143 140
144 #endif 141 #endif
OLDNEW
« no previous file with comments | « no previous file | include/core/SkCanvas.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698