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

Side by Side Diff: src/core/SkEdge.cpp

Issue 692583002: WIP: GPU-accelerated trapezoidal path renderer. Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rename GrTrapezoidalPathRenderer -> GrAAConcavePathRenderer; swap MSAA support for a coverage ramp. Created 5 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 | « src/core/SkEdge.h ('k') | src/core/SkScan.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 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
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 9
10 #include "SkEdge.h" 10 #include "SkEdge.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 } 67 }
68 // are we completely above or below the clip? 68 // are we completely above or below the clip?
69 if (clip && (top >= clip->fBottom || bot <= clip->fTop)) { 69 if (clip && (top >= clip->fBottom || bot <= clip->fTop)) {
70 return 0; 70 return 0;
71 } 71 }
72 72
73 SkFixed slope = SkFDot6Div(x1 - x0, y1 - y0); 73 SkFixed slope = SkFDot6Div(x1 - x0, y1 - y0);
74 const SkFDot6 dy = SkEdge_Compute_DY(top, y0); 74 const SkFDot6 dy = SkEdge_Compute_DY(top, y0);
75 75
76 fX = SkFDot6ToFixed(x0 + SkFixedMul(slope, dy)); // + SK_Fixed1/2 76 fX = SkFDot6ToFixed(x0 + SkFixedMul(slope, dy)); // + SK_Fixed1/2
77 fFirstXf = winding < 0 ? p1.fX : p0.fX;
77 fDX = slope; 78 fDX = slope;
78 fFirstY = top; 79 fFirstY = top;
80 fFirstYf = static_cast<float>(top);
79 fLastY = bot - 1; 81 fLastY = bot - 1;
80 fCurveCount = 0; 82 fCurveCount = 0;
81 fWinding = SkToS8(winding); 83 fWinding = SkToS8(winding);
82 fCurveShift = 0; 84 fCurveShift = 0;
83 85
84 if (clip) { 86 if (clip) {
85 this->chopLineWithClip(*clip); 87 this->chopLineWithClip(*clip);
86 } 88 }
87 return 1; 89 return 1;
88 } 90 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 261
260 A = SkFDot6ToFixedDiv2(y0 - y1 - y1 + y2); // 1/2 the real value 262 A = SkFDot6ToFixedDiv2(y0 - y1 - y1 + y2); // 1/2 the real value
261 B = SkFDot6ToFixed(y1 - y0); // 1/2 the real value 263 B = SkFDot6ToFixed(y1 - y0); // 1/2 the real value
262 264
263 fQy = SkFDot6ToFixed(y0); 265 fQy = SkFDot6ToFixed(y0);
264 fQDy = B + (A >> shift); // biased by shift 266 fQDy = B + (A >> shift); // biased by shift
265 fQDDy = A >> (shift - 1); // biased by shift 267 fQDDy = A >> (shift - 1); // biased by shift
266 268
267 fQLastX = SkFDot6ToFixed(x2); 269 fQLastX = SkFDot6ToFixed(x2);
268 fQLastY = SkFDot6ToFixed(y2); 270 fQLastY = SkFDot6ToFixed(y2);
271 fFirstXf = winding < 0 ? pts[2].fX : pts[0].fX;
272 fFirstYf = static_cast<float>(top);
269 273
270 return this->updateQuadratic(); 274 return this->updateQuadratic();
271 } 275 }
272 276
273 int SkQuadraticEdge::updateQuadratic() 277 int SkQuadraticEdge::updateQuadratic()
274 { 278 {
275 int success; 279 int success;
276 int count = fCurveCount; 280 int count = fCurveCount;
277 SkFixed oldx = fQx; 281 SkFixed oldx = fQx;
278 SkFixed oldy = fQy; 282 SkFixed oldy = fQy;
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 D = SkFDot6UpShift(y3 + 3 * (y1 - y2) - y0, upShift); 425 D = SkFDot6UpShift(y3 + 3 * (y1 - y2) - y0, upShift);
422 426
423 fCy = SkFDot6ToFixed(y0); 427 fCy = SkFDot6ToFixed(y0);
424 fCDy = B + (C >> shift) + (D >> 2*shift); // biased by shift 428 fCDy = B + (C >> shift) + (D >> 2*shift); // biased by shift
425 fCDDy = 2*C + (3*D >> (shift - 1)); // biased by 2*shift 429 fCDDy = 2*C + (3*D >> (shift - 1)); // biased by 2*shift
426 fCDDDy = 3*D >> (shift - 1); // biased by 2*shift 430 fCDDDy = 3*D >> (shift - 1); // biased by 2*shift
427 431
428 fCLastX = SkFDot6ToFixed(x3); 432 fCLastX = SkFDot6ToFixed(x3);
429 fCLastY = SkFDot6ToFixed(y3); 433 fCLastY = SkFDot6ToFixed(y3);
430 434
435 fFirstXf = winding < 0 ? pts[3].fX : pts[0].fX;
436 fFirstYf = static_cast<float>(top);
431 return this->updateCubic(); 437 return this->updateCubic();
432 } 438 }
433 439
434 int SkCubicEdge::updateCubic() 440 int SkCubicEdge::updateCubic()
435 { 441 {
436 int success; 442 int success;
437 int count = fCurveCount; 443 int count = fCurveCount;
438 SkFixed oldx = fCx; 444 SkFixed oldx = fCx;
439 SkFixed oldy = fCy; 445 SkFixed oldy = fCy;
440 SkFixed newx, newy; 446 SkFixed newx, newy;
(...skipping 29 matching lines...) Expand all
470 success = this->updateLine(oldx, oldy, newx, newy); 476 success = this->updateLine(oldx, oldy, newx, newy);
471 oldx = newx; 477 oldx = newx;
472 oldy = newy; 478 oldy = newy;
473 } while (count < 0 && !success); 479 } while (count < 0 && !success);
474 480
475 fCx = newx; 481 fCx = newx;
476 fCy = newy; 482 fCy = newy;
477 fCurveCount = SkToS8(count); 483 fCurveCount = SkToS8(count);
478 return success; 484 return success;
479 } 485 }
OLDNEW
« no previous file with comments | « src/core/SkEdge.h ('k') | src/core/SkScan.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698