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

Side by Side Diff: gm/beziereffects.cpp

Issue 582963002: Solo gp (Closed) Base URL: https://skia.googlesource.com/skia.git@no_peb
Patch Set: fix Created 6 years, 3 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/convexpolyeffect.cpp » ('j') | include/gpu/GrGeometryProcessor.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2013 Google Inc. 3 * Copyright 2013 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 "GrPathUtils.h" 16 #include "GrPathUtils.h"
17 #include "GrTest.h" 17 #include "GrTest.h"
18 #include "SkColorPriv.h" 18 #include "SkColorPriv.h"
19 #include "SkDevice.h" 19 #include "SkDevice.h"
20 #include "SkGeometry.h" 20 #include "SkGeometry.h"
21 21
22 #include "effects/GrBezierEffect.h" 22 #include "effects/GrBezierEffect.h"
23 23
24 // Position & KLM line eq values. These are the vertex attributes for Bezier cur ves. The last value 24 // Position & KLM line eq values. These are the vertex attributes for Bezier cur ves. The last value
25 // of the Vec4f is ignored. 25 // of the Vec4f is ignored.
26 namespace { 26 namespace {
27 extern const GrVertexAttrib kAttribs[] = { 27 extern const GrVertexAttrib kAttribs[] = {
28 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding}, 28 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding},
29 {kVec4f_GrVertexAttribType, sizeof(SkPoint), kEffect_GrVertexAttribBinding} 29 {kVec4f_GrVertexAttribType, sizeof(SkPoint), kGeometryProcessor_GrVertexAttr ibBinding}
30 }; 30 };
31 } 31 }
32 32
33 static inline SkScalar eval_line(const SkPoint& p, const SkScalar lineEq[3], SkS calar sign) { 33 static inline SkScalar eval_line(const SkPoint& p, const SkScalar lineEq[3], SkS calar sign) {
34 return sign * (lineEq[0] * p.fX + lineEq[1] * p.fY + lineEq[2]); 34 return sign * (lineEq[0] * p.fX + lineEq[1] * p.fY + lineEq[2]);
35 } 35 }
36 36
37 namespace skiagm { 37 namespace skiagm {
38 /** 38 /**
39 * This GM directly exercises effects that draw Bezier curves in the GPU backend . 39 * This GM directly exercises effects that draw Bezier curves in the GPU backend .
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 int row = 0; 85 int row = 0;
86 int col = 0; 86 int col = 0;
87 87
88 for (int i = 0; i < kNumCubics; ++i) { 88 for (int i = 0; i < kNumCubics; ++i) {
89 SkPoint baseControlPts[] = { 89 SkPoint baseControlPts[] = {
90 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, 90 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)},
91 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, 91 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)},
92 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, 92 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)},
93 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} 93 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}
94 }; 94 };
95 for(int edgeType = 0; edgeType < kGrEffectEdgeTypeCnt; ++edgeType) { 95 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) {
96 SkAutoTUnref<GrEffect> effect; 96 SkAutoTUnref<GrGeometryProcessor> gp;
97 { // scope to contain GrTestTarget 97 { // scope to contain GrTestTarget
98 GrTestTarget tt; 98 GrTestTarget tt;
99 context->getTestTarget(&tt); 99 context->getTestTarget(&tt);
100 if (NULL == tt.target()) { 100 if (NULL == tt.target()) {
101 continue; 101 continue;
102 } 102 }
103 GrEffectEdgeType et = (GrEffectEdgeType)edgeType; 103 GrProcessorEdgeType et = (GrProcessorEdgeType)edgeType;
104 effect.reset(GrCubicEffect::Create(et, *tt.target()->caps()) ); 104 gp.reset(GrCubicEffect::Create(et, *tt.target()->caps()));
105 if (!effect) { 105 if (!gp) {
106 continue; 106 continue;
107 } 107 }
108 } 108 }
109 109
110 SkScalar x = SkScalarMul(col, w); 110 SkScalar x = SkScalarMul(col, w);
111 SkScalar y = SkScalarMul(row, h); 111 SkScalar y = SkScalarMul(row, h);
112 SkPoint controlPts[] = { 112 SkPoint controlPts[] = {
113 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, 113 {x + baseControlPts[0].fX, y + baseControlPts[0].fY},
114 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, 114 {x + baseControlPts[1].fX, y + baseControlPts[1].fY},
115 {x + baseControlPts[2].fX, y + baseControlPts[2].fY}, 115 {x + baseControlPts[2].fX, y + baseControlPts[2].fY},
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 verts[v].fKLM[1] = eval_line(verts[v].fPosition, klmEqs + 3, klmSigns[c]); 163 verts[v].fKLM[1] = eval_line(verts[v].fPosition, klmEqs + 3, klmSigns[c]);
164 verts[v].fKLM[2] = eval_line(verts[v].fPosition, klmEqs + 6, 1.f); 164 verts[v].fKLM[2] = eval_line(verts[v].fPosition, klmEqs + 6, 1.f);
165 } 165 }
166 166
167 GrTestTarget tt; 167 GrTestTarget tt;
168 context->getTestTarget(&tt); 168 context->getTestTarget(&tt);
169 SkASSERT(tt.target()); 169 SkASSERT(tt.target());
170 GrDrawState* drawState = tt.target()->drawState(); 170 GrDrawState* drawState = tt.target()->drawState();
171 drawState->setVertexAttribs<kAttribs>(2, sizeof(Vertex)); 171 drawState->setVertexAttribs<kAttribs>(2, sizeof(Vertex));
172 172
173 drawState->setGeometryProcessor(effect); 173 drawState->setGeometryProcessor(gp);
174 drawState->setRenderTarget(rt); 174 drawState->setRenderTarget(rt);
175 drawState->setColor(0xff000000); 175 drawState->setColor(0xff000000);
176 176
177 tt.target()->setVertexSourceToArray(verts, 4); 177 tt.target()->setVertexSourceToArray(verts, 4);
178 tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuf fer()); 178 tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuf fer());
179 tt.target()->drawIndexed(kTriangleFan_GrPrimitiveType, 0, 0, 4, 6); 179 tt.target()->drawIndexed(kTriangleFan_GrPrimitiveType, 0, 0, 4, 6);
180 } 180 }
181 ++col; 181 ++col;
182 if (numCols == col) { 182 if (numCols == col) {
183 col = 0; 183 col = 0;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 int row = 0; 243 int row = 0;
244 int col = 0; 244 int col = 0;
245 245
246 for (int i = 0; i < kNumConics; ++i) { 246 for (int i = 0; i < kNumConics; ++i) {
247 SkPoint baseControlPts[] = { 247 SkPoint baseControlPts[] = {
248 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, 248 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)},
249 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, 249 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)},
250 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} 250 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}
251 }; 251 };
252 SkScalar weight = rand.nextRangeF(0.f, 2.f); 252 SkScalar weight = rand.nextRangeF(0.f, 2.f);
253 for(int edgeType = 0; edgeType < kGrEffectEdgeTypeCnt; ++edgeType) { 253 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) {
254 SkAutoTUnref<GrEffect> effect; 254 SkAutoTUnref<GrGeometryProcessor> gp;
255 { // scope to contain GrTestTarget 255 { // scope to contain GrTestTarget
256 GrTestTarget tt; 256 GrTestTarget tt;
257 context->getTestTarget(&tt); 257 context->getTestTarget(&tt);
258 if (NULL == tt.target()) { 258 if (NULL == tt.target()) {
259 continue; 259 continue;
260 } 260 }
261 GrEffectEdgeType et = (GrEffectEdgeType)edgeType; 261 GrProcessorEdgeType et = (GrProcessorEdgeType)edgeType;
262 effect.reset(GrConicEffect::Create(et, *tt.target()->caps()) ); 262 gp.reset(GrConicEffect::Create(et, *tt.target()->caps()));
263 if (!effect) { 263 if (!gp) {
264 continue; 264 continue;
265 } 265 }
266 } 266 }
267 267
268 SkScalar x = SkScalarMul(col, w); 268 SkScalar x = SkScalarMul(col, w);
269 SkScalar y = SkScalarMul(row, h); 269 SkScalar y = SkScalarMul(row, h);
270 SkPoint controlPts[] = { 270 SkPoint controlPts[] = {
271 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, 271 {x + baseControlPts[0].fX, y + baseControlPts[0].fY},
272 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, 272 {x + baseControlPts[1].fX, y + baseControlPts[1].fY},
273 {x + baseControlPts[2].fX, y + baseControlPts[2].fY} 273 {x + baseControlPts[2].fX, y + baseControlPts[2].fY}
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 verts[v].fKLM[1] = eval_line(verts[v].fPosition, klmEqs + 3, 1.f); 318 verts[v].fKLM[1] = eval_line(verts[v].fPosition, klmEqs + 3, 1.f);
319 verts[v].fKLM[2] = eval_line(verts[v].fPosition, klmEqs + 6, 1.f); 319 verts[v].fKLM[2] = eval_line(verts[v].fPosition, klmEqs + 6, 1.f);
320 } 320 }
321 321
322 GrTestTarget tt; 322 GrTestTarget tt;
323 context->getTestTarget(&tt); 323 context->getTestTarget(&tt);
324 SkASSERT(tt.target()); 324 SkASSERT(tt.target());
325 GrDrawState* drawState = tt.target()->drawState(); 325 GrDrawState* drawState = tt.target()->drawState();
326 drawState->setVertexAttribs<kAttribs>(2, sizeof(Vertex)); 326 drawState->setVertexAttribs<kAttribs>(2, sizeof(Vertex));
327 327
328 drawState->setGeometryProcessor(effect); 328 drawState->setGeometryProcessor(gp);
329 drawState->setRenderTarget(rt); 329 drawState->setRenderTarget(rt);
330 drawState->setColor(0xff000000); 330 drawState->setColor(0xff000000);
331 331
332 tt.target()->setVertexSourceToArray(verts, 4); 332 tt.target()->setVertexSourceToArray(verts, 4);
333 tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuf fer()); 333 tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuf fer());
334 tt.target()->drawIndexed(kTriangleFan_GrPrimitiveType, 0, 0, 4, 6); 334 tt.target()->drawIndexed(kTriangleFan_GrPrimitiveType, 0, 0, 4, 6);
335 } 335 }
336 ++col; 336 ++col;
337 if (numCols == col) { 337 if (numCols == col) {
338 col = 0; 338 col = 0;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 SkScalar h = SkIntToScalar(rt->height()) / numRows; 432 SkScalar h = SkIntToScalar(rt->height()) / numRows;
433 int row = 0; 433 int row = 0;
434 int col = 0; 434 int col = 0;
435 435
436 for (int i = 0; i < kNumQuads; ++i) { 436 for (int i = 0; i < kNumQuads; ++i) {
437 SkPoint baseControlPts[] = { 437 SkPoint baseControlPts[] = {
438 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, 438 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)},
439 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, 439 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)},
440 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} 440 {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}
441 }; 441 };
442 for(int edgeType = 0; edgeType < kGrEffectEdgeTypeCnt; ++edgeType) { 442 for(int edgeType = 0; edgeType < kGrProcessorEdgeTypeCnt; ++edgeType ) {
443 SkAutoTUnref<GrEffect> effect; 443 SkAutoTUnref<GrGeometryProcessor> gp;
444 { // scope to contain GrTestTarget 444 { // scope to contain GrTestTarget
445 GrTestTarget tt; 445 GrTestTarget tt;
446 context->getTestTarget(&tt); 446 context->getTestTarget(&tt);
447 if (NULL == tt.target()) { 447 if (NULL == tt.target()) {
448 continue; 448 continue;
449 } 449 }
450 GrEffectEdgeType et = (GrEffectEdgeType)edgeType; 450 GrProcessorEdgeType et = (GrProcessorEdgeType)edgeType;
451 effect.reset(GrQuadEffect::Create(et, *tt.target()->caps())) ; 451 gp.reset(GrQuadEffect::Create(et, *tt.target()->caps()));
452 if (!effect) { 452 if (!gp) {
453 continue; 453 continue;
454 } 454 }
455 } 455 }
456 456
457 SkScalar x = SkScalarMul(col, w); 457 SkScalar x = SkScalarMul(col, w);
458 SkScalar y = SkScalarMul(row, h); 458 SkScalar y = SkScalarMul(row, h);
459 SkPoint controlPts[] = { 459 SkPoint controlPts[] = {
460 {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, 460 {x + baseControlPts[0].fX, y + baseControlPts[0].fY},
461 {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, 461 {x + baseControlPts[1].fX, y + baseControlPts[1].fY},
462 {x + baseControlPts[2].fX, y + baseControlPts[2].fY} 462 {x + baseControlPts[2].fX, y + baseControlPts[2].fY}
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 502
503 GrPathUtils::QuadUVMatrix DevToUV(pts); 503 GrPathUtils::QuadUVMatrix DevToUV(pts);
504 DevToUV.apply<4, sizeof(Vertex), sizeof(SkPoint)>(verts); 504 DevToUV.apply<4, sizeof(Vertex), sizeof(SkPoint)>(verts);
505 505
506 GrTestTarget tt; 506 GrTestTarget tt;
507 context->getTestTarget(&tt); 507 context->getTestTarget(&tt);
508 SkASSERT(tt.target()); 508 SkASSERT(tt.target());
509 GrDrawState* drawState = tt.target()->drawState(); 509 GrDrawState* drawState = tt.target()->drawState();
510 drawState->setVertexAttribs<kAttribs>(2, sizeof(Vertex)); 510 drawState->setVertexAttribs<kAttribs>(2, sizeof(Vertex));
511 511
512 drawState->setGeometryProcessor(effect); 512 drawState->setGeometryProcessor(gp);
513 drawState->setRenderTarget(rt); 513 drawState->setRenderTarget(rt);
514 drawState->setColor(0xff000000); 514 drawState->setColor(0xff000000);
515 515
516 tt.target()->setVertexSourceToArray(verts, 4); 516 tt.target()->setVertexSourceToArray(verts, 4);
517 tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuf fer()); 517 tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuf fer());
518 tt.target()->drawIndexed(kTriangles_GrPrimitiveType, 0, 0, 4 , 6); 518 tt.target()->drawIndexed(kTriangles_GrPrimitiveType, 0, 0, 4 , 6);
519 } 519 }
520 ++col; 520 ++col;
521 if (numCols == col) { 521 if (numCols == col) {
522 col = 0; 522 col = 0;
523 ++row; 523 ++row;
524 } 524 }
525 } 525 }
526 } 526 }
527 } 527 }
528 528
529 private: 529 private:
530 typedef GM INHERITED; 530 typedef GM INHERITED;
531 }; 531 };
532 532
533 DEF_GM( return SkNEW(BezierCubicEffects); ) 533 DEF_GM( return SkNEW(BezierCubicEffects); )
534 DEF_GM( return SkNEW(BezierConicEffects); ) 534 DEF_GM( return SkNEW(BezierConicEffects); )
535 DEF_GM( return SkNEW(BezierQuadEffects); ) 535 DEF_GM( return SkNEW(BezierQuadEffects); )
536 536
537 } 537 }
538 538
539 #endif 539 #endif
OLDNEW
« no previous file with comments | « no previous file | gm/convexpolyeffect.cpp » ('j') | include/gpu/GrGeometryProcessor.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698