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

Side by Side Diff: gm/convexpolyeffect.cpp

Issue 1839743002: Fix GrConvexPolyEffect to deal with line paths. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix include to use "" instead of <> Created 4 years, 8 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 | src/gpu/effects/GrConvexPolyEffect.cpp » ('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
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 ngon.lineTo(point); 128 ngon.lineTo(point);
129 } 129 }
130 } 130 }
131 131
132 fPaths.addToTail(ngon); 132 fPaths.addToTail(ngon);
133 SkMatrix scaleM; 133 SkMatrix scaleM;
134 scaleM.setScale(1.1f, 0.4f); 134 scaleM.setScale(1.1f, 0.4f);
135 ngon.transform(scaleM); 135 ngon.transform(scaleM);
136 fPaths.addToTail(ngon); 136 fPaths.addToTail(ngon);
137 137
138 SkPath linePath;
139 linePath.moveTo(5.f, 5.f);
140 linePath.lineTo(6.f, 6.f);
141 fPaths.addToTail(linePath);
142
138 // integer edges 143 // integer edges
139 fRects.addToTail(SkRect::MakeLTRB(5.f, 1.f, 30.f, 25.f)); 144 fRects.addToTail(SkRect::MakeLTRB(5.f, 1.f, 30.f, 25.f));
140 // half-integer edges 145 // half-integer edges
141 fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 24.5f)); 146 fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 24.5f));
142 // vertically/horizontally thin rects that cover pixel centers 147 // vertically/horizontally thin rects that cover pixel centers
143 fRects.addToTail(SkRect::MakeLTRB(5.25f, 0.5f, 5.75f, 24.5f)); 148 fRects.addToTail(SkRect::MakeLTRB(5.25f, 0.5f, 5.75f, 24.5f));
144 fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 0.75f)); 149 fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 0.75f));
145 // vertically/horizontally thin rects that don't cover pixel centers 150 // vertically/horizontally thin rects that don't cover pixel centers
146 fRects.addToTail(SkRect::MakeLTRB(5.55f, 0.5f, 5.75f, 24.5f)); 151 fRects.addToTail(SkRect::MakeLTRB(5.55f, 0.5f, 5.75f, 24.5f));
147 fRects.addToTail(SkRect::MakeLTRB(5.5f, .05f, 29.5f, .25f)); 152 fRects.addToTail(SkRect::MakeLTRB(5.5f, .05f, 29.5f, .25f));
(...skipping 20 matching lines...) Expand all
168 return; 173 return;
169 } 174 }
170 175
171 Color color(0xff000000); 176 Color color(0xff000000);
172 Coverage coverage(Coverage::kSolid_Type); 177 Coverage coverage(Coverage::kSolid_Type);
173 LocalCoords localCoords(LocalCoords::kUnused_Type); 178 LocalCoords localCoords(LocalCoords::kUnused_Type);
174 SkAutoTUnref<const GrGeometryProcessor> gp( 179 SkAutoTUnref<const GrGeometryProcessor> gp(
175 GrDefaultGeoProcFactory::Create(color, coverage, localCoords, Sk Matrix::I())); 180 GrDefaultGeoProcFactory::Create(color, coverage, localCoords, Sk Matrix::I()));
176 181
177 SkScalar y = 0; 182 SkScalar y = 0;
183 static const SkScalar kDX = 12.f;
178 for (PathList::Iter iter(fPaths, PathList::Iter::kHead_IterStart); 184 for (PathList::Iter iter(fPaths, PathList::Iter::kHead_IterStart);
179 iter.get(); 185 iter.get();
180 iter.next()) { 186 iter.next()) {
181 const SkPath* path = iter.get(); 187 const SkPath* path = iter.get();
182 SkScalar x = 0; 188 SkScalar x = 0;
183 189
184 for (int et = 0; et < kGrProcessorEdgeTypeCnt; ++et) { 190 for (int et = 0; et < kGrProcessorEdgeTypeCnt; ++et) {
185 const SkMatrix m = SkMatrix::MakeTrans(x, y); 191 const SkMatrix m = SkMatrix::MakeTrans(x, y);
186 SkPath p; 192 SkPath p;
187 path->transform(m, &p); 193 path->transform(m, &p);
(...skipping 12 matching lines...) Expand all
200 206
201 ConvexPolyTestBatch::Geometry geometry; 207 ConvexPolyTestBatch::Geometry geometry;
202 geometry.fColor = color.fColor; 208 geometry.fColor = color.fColor;
203 geometry.fRect = p.getBounds(); 209 geometry.fRect = p.getBounds();
204 geometry.fBounds = p.getBounds(); 210 geometry.fBounds = p.getBounds();
205 211
206 SkAutoTUnref<GrDrawBatch> batch(ConvexPolyTestBatch::Create(gp, geometry)); 212 SkAutoTUnref<GrDrawBatch> batch(ConvexPolyTestBatch::Create(gp, geometry));
207 213
208 drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBui lder, batch); 214 drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBui lder, batch);
209 215
210 x += SkScalarCeilToScalar(path->getBounds().width() + 10.f); 216 x += SkScalarCeilToScalar(path->getBounds().width() + kDX);
211 } 217 }
212 218
213 // Draw AA and non AA paths using normal API for reference. 219 // Draw AA and non AA paths using normal API for reference.
214 canvas->save(); 220 canvas->save();
215 canvas->translate(x, y); 221 canvas->translate(x, y);
216 SkPaint paint; 222 SkPaint paint;
217 canvas->drawPath(*path, paint); 223 canvas->drawPath(*path, paint);
218 canvas->translate(path->getBounds().width() + 10.f, 0); 224 canvas->translate(path->getBounds().width() + 10.f, 0);
219 paint.setAntiAlias(true); 225 paint.setAntiAlias(true);
220 canvas->drawPath(*path, paint); 226 canvas->drawPath(*path, paint);
(...skipping 26 matching lines...) Expand all
247 ConvexPolyTestBatch::Geometry geometry; 253 ConvexPolyTestBatch::Geometry geometry;
248 geometry.fColor = color.fColor; 254 geometry.fColor = color.fColor;
249 geometry.fRect = rect; 255 geometry.fRect = rect;
250 geometry.fBounds = rect; 256 geometry.fBounds = rect;
251 geometry.fBounds.sort(); 257 geometry.fBounds.sort();
252 258
253 SkAutoTUnref<GrDrawBatch> batch(ConvexPolyTestBatch::Create(gp, geometry)); 259 SkAutoTUnref<GrDrawBatch> batch(ConvexPolyTestBatch::Create(gp, geometry));
254 260
255 drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBui lder, batch); 261 drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBui lder, batch);
256 262
257 x += SkScalarCeilToScalar(rect.width() + 10.f); 263 x += SkScalarCeilToScalar(rect.width() + kDX);
258 } 264 }
259 265
260 // Draw rect without and with AA using normal API for reference 266 // Draw rect without and with AA using normal API for reference
261 canvas->save(); 267 canvas->save();
262 canvas->translate(x, y); 268 canvas->translate(x, y);
263 SkPaint paint; 269 SkPaint paint;
264 canvas->drawRect(*iter.get(), paint); 270 canvas->drawRect(*iter.get(), paint);
265 x += SkScalarCeilToScalar(iter.get()->width() + 10.f); 271 x += SkScalarCeilToScalar(iter.get()->width() + kDX);
266 paint.setAntiAlias(true); 272 paint.setAntiAlias(true);
267 canvas->drawRect(*iter.get(), paint); 273 canvas->drawRect(*iter.get(), paint);
268 canvas->restore(); 274 canvas->restore();
269 275
270 y += SkScalarCeilToScalar(iter.get()->height() + 20.f); 276 y += SkScalarCeilToScalar(iter.get()->height() + 20.f);
271 } 277 }
272 } 278 }
273 279
274 private: 280 private:
275 typedef SkTLList<SkPath, 1> PathList; 281 typedef SkTLList<SkPath, 1> PathList;
276 typedef SkTLList<SkRect, 1> RectList; 282 typedef SkTLList<SkRect, 1> RectList;
277 PathList fPaths; 283 PathList fPaths;
278 RectList fRects; 284 RectList fRects;
279 285
280 typedef GM INHERITED; 286 typedef GM INHERITED;
281 }; 287 };
282 288
283 DEF_GM(return new ConvexPolyEffect;) 289 DEF_GM(return new ConvexPolyEffect;)
284 } 290 }
285 291
286 #endif 292 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/effects/GrConvexPolyEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698