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

Side by Side Diff: bench/PatchBench.cpp

Issue 463493002: SkCanvas::drawPatch param SkPoint[12] (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Removed GPU headers from GM 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 | gm/patch.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7 #include "Benchmark.h"
8 #include "SkBitmap.h"
9 #include "SkCanvas.h"
10 #include "SkColorPriv.h"
11 #include "SkGradientShader.h"
12 #include "SkPaint.h"
13 #include "SkPatchUtils.h"
14 #include "SkRandom.h"
15 #include "SkShader.h"
16 #include "SkString.h"
17 #include "SkTArray.h"
18
19 class PatchBench : public Benchmark {
20
21 public:
22
23 enum VertexMode {
24 kNone_VertexMode,
25 kColors_VertexMode,
26 kTexCoords_VertexMode,
27 kBoth_VertexMode
28 };
29
30 PatchBench(SkPoint scale, VertexMode vertexMode)
31 : fScale(scale)
32 , fVertexMode(vertexMode) { }
33
34 // to add name of specific class override this method
35 virtual void appendName(SkString* name) {
36 name->append("normal");
37 }
38
39 // to make other type of patches override this method
40 virtual void setCubics() {
41 const SkPoint points[SkPatchUtils::kNumCtrlPts] = {
42 //top points
43 {100,100},{150,50},{250,150}, {300,100},
44 //right points
45 {350, 150},{250,200},
46 //bottom points
47 {300,300},{250,250},{150,350},{100,300},
48 //left points
49 {50,250},{150,50}
50 };
51 memcpy(fCubics, points, SkPatchUtils::kNumCtrlPts * sizeof(SkPoint));
52 }
53
54 virtual void setColors() {
55 const SkColor colors[SkPatchUtils::kNumCorners] = {
56 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN
57 };
58 memcpy(fColors, colors, SkPatchUtils::kNumCorners * sizeof(SkColor));
59 }
60
61 virtual void setTexCoords() {
62 const SkPoint texCoords[SkPatchUtils::kNumCorners] = {
63 {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f,1.0f}, {0.0f, 1.0f}
64 };
65 memcpy(fTexCoords, texCoords, SkPatchUtils::kNumCorners * sizeof(SkPoint ));
66 }
67
68 // override this method to change the shader
69 virtual SkShader* getShader() {
70 const SkColor colors[] = {
71 SK_ColorRED, SK_ColorCYAN, SK_ColorGREEN, SK_ColorWHITE,
72 SK_ColorMAGENTA, SK_ColorBLUE, SK_ColorYELLOW,
73 };
74 const SkPoint pts[] = { { 200.f / 4.f, 0.f }, { 3.f * 200.f / 4, 200.f } };
75
76 return SkGradientShader::CreateLinear(pts, colors, NULL,
77 SK_ARRAY_COUNT(colors),
78 SkShader::kMirror_TileMode);
79 }
80
81 protected:
82 virtual const char* onGetName() SK_OVERRIDE {
83 SkString vertexMode;
84 switch (fVertexMode) {
85 case kNone_VertexMode:
86 vertexMode.set("meshlines");
87 break;
88 case kColors_VertexMode:
89 vertexMode.set("colors");
90 break;
91 case kTexCoords_VertexMode:
92 vertexMode.set("texs");
93 break;
94 case kBoth_VertexMode:
95 vertexMode.set("colors&texs");
96 break;
97 default:
98 break;
99 }
100 SkString type;
101 this->appendName(&type);
102 fName.printf("patch_%s_%s_[%f,%f]", type.c_str(), vertexMode.c_str(),
103 fScale.x(), fScale.y());
104 return fName.c_str();
105 }
106
107 virtual void preDraw() {
108
109 }
110
111 virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
112
113 this->setCubics();
114 this->setColors();
115 this->setTexCoords();
116 this->setupPaint(&fPaint);
117 switch (fVertexMode) {
118 case kTexCoords_VertexMode:
119 case kBoth_VertexMode:
120 fPaint.setShader(getShader());
121 break;
122 default:
123 fPaint.setShader(NULL);
124 break;
125 }
126
127 canvas->scale(fScale.x(), fScale.y());
128 for (int i = 0; i < loops; i++) {
129 switch (fVertexMode) {
130 case kNone_VertexMode:
131 canvas->drawPatch(fCubics, NULL, NULL, NULL, fPaint);
132 break;
133 case kColors_VertexMode:
134 canvas->drawPatch(fCubics, fColors, NULL, NULL, fPaint);
135 break;
136 case kTexCoords_VertexMode:
137 canvas->drawPatch(fCubics, NULL, fTexCoords, NULL, fPaint);
138 break;
139 case kBoth_VertexMode:
140 canvas->drawPatch(fCubics, fColors, fTexCoords, NULL, fPaint );
141 break;
142 default:
143 break;
144 }
145 }
146 }
147
148 SkPaint fPaint;
149 SkString fName;
150 SkVector fScale;
151 SkPoint fCubics[12];
152 SkPoint fTexCoords[4];
153 SkColor fColors[4];
154 VertexMode fVertexMode;
155
156 typedef Benchmark INHERITED;
157 };
158
159 class SquarePatchBench : public PatchBench {
160 public:
161 SquarePatchBench(SkPoint scale, VertexMode vertexMode)
162 : INHERITED(scale, vertexMode) { }
163
164 virtual void appendName(SkString* name) SK_OVERRIDE {
165 name->append("square");
166 }
167
168 virtual void setCubics() {
169 const SkPoint points[SkPatchUtils::kNumCtrlPts] = {
170 //top points
171 {100,100},{150,100},{250,100}, {300,100},
172 //right points
173 {300, 150},{300,250},
174 //bottom points
175 {300,300},{250,300},{150,300},{100,300},
176 //left points
177 {100,250},{100,150}
178 };
179 memcpy(fCubics, points, SkPatchUtils::kNumCtrlPts * sizeof(SkPoint));
180 }
181 private:
182 typedef PatchBench INHERITED;
183 };
184
185 class LODDiffPatchBench : public PatchBench {
186 public:
187 LODDiffPatchBench(SkPoint scale, VertexMode vertexMode)
188 : INHERITED(scale, vertexMode) { }
189
190 virtual void appendName(SkString* name) SK_OVERRIDE {
191 name->append("LOD_Diff");
192 }
193
194 virtual void setCubics() {
195 const SkPoint points[SkPatchUtils::kNumCtrlPts] = {
196 //top points
197 {100,175},{150,100},{250,100}, {300,0},
198 //right points
199 {300, 150},{300,250},
200 //bottom points
201 {300,400},{250,300},{150,300},{100,225},
202 //left points
203 {100,215},{100,185}
204 };
205 memcpy(fCubics, points, SkPatchUtils::kNumCtrlPts * sizeof(SkPoint));
206 }
207 private:
208 typedef PatchBench INHERITED;
209 };
210
211 class LoopPatchBench : public PatchBench {
212 public:
213 LoopPatchBench(SkPoint scale, VertexMode vertexMode)
214 : INHERITED(scale, vertexMode) { }
215
216 virtual void appendName(SkString* name) SK_OVERRIDE {
217 name->append("loop");
218 }
219
220 virtual void setCubics() {
221 const SkPoint points[SkPatchUtils::kNumCtrlPts] = {
222 //top points
223 {100,100},{300,200},{100,200}, {300,100},
224 //right points
225 {380, 400},{380,0},
226 //bottom points
227 {300,300},{250,250},{30,200},{100,300},
228 //left points
229 {140,325},{150,150}
230 };
231 memcpy(fCubics, points, SkPatchUtils::kNumCtrlPts * sizeof(SkPoint));
232 }
233 private:
234 typedef PatchBench INHERITED;
235 };
236
237 ///////////////////////////////////////////////////////////////////////////////
238
239 DEF_BENCH( return new PatchBench(SkVector::Make(0.1f, 0.1f), PatchBench::kNone_V ertexMode); )
240 DEF_BENCH( return new PatchBench(SkVector::Make(0.1f, 0.1f), PatchBench::kColors _VertexMode); )
241 DEF_BENCH( return new PatchBench(SkVector::Make(0.1f, 0.1f), PatchBench::kTexCoo rds_VertexMode); )
242 DEF_BENCH( return new PatchBench(SkVector::Make(0.1f, 0.1f), PatchBench::kBoth_V ertexMode); )
243 DEF_BENCH( return new PatchBench(SkVector::Make(1.f, 1.0f), PatchBench::kNone_Ve rtexMode); )
244 DEF_BENCH( return new PatchBench(SkVector::Make(1.0f, 1.0f), PatchBench::kColors _VertexMode); )
245 DEF_BENCH( return new PatchBench(SkVector::Make(1.0f, 1.0f), PatchBench::kTexCoo rds_VertexMode); )
246 DEF_BENCH( return new PatchBench(SkVector::Make(1.0f, 1.0f), PatchBench::kBoth_V ertexMode); )
247 DEF_BENCH( return new PatchBench(SkVector::Make(3.0f, 3.0f), PatchBench::kNone_V ertexMode); )
248 DEF_BENCH( return new PatchBench(SkVector::Make(3.0f, 3.0f), PatchBench::kColors _VertexMode); )
249 DEF_BENCH( return new PatchBench(SkVector::Make(3.0f, 3.0f), PatchBench::kTexCoo rds_VertexMode); )
250 DEF_BENCH( return new PatchBench(SkVector::Make(3.0f, 3.0f), PatchBench::kBoth_V ertexMode); )
251
252 DEF_BENCH( return new SquarePatchBench(SkVector::Make(0.1f, 0.1f),
253 PatchBench::kNone_VertexMode); )
254 DEF_BENCH( return new SquarePatchBench(SkVector::Make(0.1f, 0.1f),
255 PatchBench::kColors_VertexMode); )
256 DEF_BENCH( return new SquarePatchBench(SkVector::Make(0.1f, 0.1f),
257 PatchBench::kTexCoords_VertexMode); )
258 DEF_BENCH( return new SquarePatchBench(SkVector::Make(0.1f, 0.1f),
259 PatchBench::kBoth_VertexMode); )
260 DEF_BENCH( return new SquarePatchBench(SkVector::Make(1.f, 1.0f),
261 PatchBench::kNone_VertexMode); )
262 DEF_BENCH( return new SquarePatchBench(SkVector::Make(1.0f, 1.0f),
263 PatchBench::kColors_VertexMode); )
264 DEF_BENCH( return new SquarePatchBench(SkVector::Make(1.0f, 1.0f),
265 PatchBench::kTexCoords_VertexMode); )
266 DEF_BENCH( return new SquarePatchBench(SkVector::Make(1.0f, 1.0f),
267 PatchBench::kBoth_VertexMode); )
268 DEF_BENCH( return new SquarePatchBench(SkVector::Make(3.0f, 3.0f),
269 PatchBench::kNone_VertexMode); )
270 DEF_BENCH( return new SquarePatchBench(SkVector::Make(3.0f, 3.0f),
271 PatchBench::kColors_VertexMode); )
272 DEF_BENCH( return new SquarePatchBench(SkVector::Make(3.0f, 3.0f),
273 PatchBench::kTexCoords_VertexMode); )
274 DEF_BENCH( return new SquarePatchBench(SkVector::Make(3.0f, 3.0f),
275 PatchBench::kBoth_VertexMode); )
276
277 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(0.1f, 0.1f),
278 PatchBench::kNone_VertexMode); )
279 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(0.1f, 0.1f),
280 PatchBench::kColors_VertexMode); )
281 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(0.1f, 0.1f),
282 PatchBench::kTexCoords_VertexMode); )
283 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(0.1f, 0.1f),
284 PatchBench::kBoth_VertexMode); )
285 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(1.f, 1.0f),
286 PatchBench::kNone_VertexMode); )
287 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(1.0f, 1.0f),
288 PatchBench::kColors_VertexMode); )
289 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(1.0f, 1.0f),
290 PatchBench::kTexCoords_VertexMode); )
291 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(1.0f, 1.0f),
292 PatchBench::kBoth_VertexMode); )
293 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(3.0f, 3.0f),
294 PatchBench::kNone_VertexMode); )
295 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(3.0f, 3.0f),
296 PatchBench::kColors_VertexMode); )
297 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(3.0f, 3.0f),
298 PatchBench::kTexCoords_VertexMode); )
299 DEF_BENCH( return new LODDiffPatchBench(SkVector::Make(3.0f, 3.0f),
300 PatchBench::kBoth_VertexMode); )
301
302 DEF_BENCH( return new LoopPatchBench(SkVector::Make(0.1f, 0.1f),
303 PatchBench::kNone_VertexMode); )
304 DEF_BENCH( return new LoopPatchBench(SkVector::Make(0.1f, 0.1f),
305 PatchBench::kColors_VertexMode); )
306 DEF_BENCH( return new LoopPatchBench(SkVector::Make(0.1f, 0.1f),
307 PatchBench::kTexCoords_VertexMode); )
308 DEF_BENCH( return new LoopPatchBench(SkVector::Make(0.1f, 0.1f),
309 PatchBench::kBoth_VertexMode); )
310 DEF_BENCH( return new LoopPatchBench(SkVector::Make(1.f, 1.0f),
311 PatchBench::kNone_VertexMode); )
312 DEF_BENCH( return new LoopPatchBench(SkVector::Make(1.0f, 1.0f),
313 PatchBench::kColors_VertexMode); )
314 DEF_BENCH( return new LoopPatchBench(SkVector::Make(1.0f, 1.0f),
315 PatchBench::kTexCoords_VertexMode); )
316 DEF_BENCH( return new LoopPatchBench(SkVector::Make(1.0f, 1.0f),
317 PatchBench::kBoth_VertexMode); )
318 DEF_BENCH( return new LoopPatchBench(SkVector::Make(3.0f, 3.0f),
319 PatchBench::kNone_VertexMode); )
320 DEF_BENCH( return new LoopPatchBench(SkVector::Make(3.0f, 3.0f),
321 PatchBench::kColors_VertexMode); )
322 DEF_BENCH( return new LoopPatchBench(SkVector::Make(3.0f, 3.0f),
323 PatchBench::kTexCoords_VertexMode); )
324 DEF_BENCH( return new LoopPatchBench(SkVector::Make(3.0f, 3.0f),
325 PatchBench::kBoth_VertexMode); )
OLDNEW
« no previous file with comments | « no previous file | gm/patch.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698