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

Side by Side Diff: src/pathops/SkIntersections.h

Issue 75453003: optimize pathops coverage (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: remove unused code now that testing is complete Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 #ifndef SkIntersections_DEFINE 7 #ifndef SkIntersections_DEFINE
8 #define SkIntersections_DEFINE 8 #define SkIntersections_DEFINE
9 9
10 #include "SkPathOpsCubic.h" 10 #include "SkPathOpsCubic.h"
11 #include "SkPathOpsLine.h" 11 #include "SkPathOpsLine.h"
12 #include "SkPathOpsPoint.h" 12 #include "SkPathOpsPoint.h"
13 #include "SkPathOpsQuad.h" 13 #include "SkPathOpsQuad.h"
14 14
15 class SkIntersections { 15 class SkIntersections {
16 public: 16 public:
17 SkIntersections() 17 SkIntersections()
18 : fSwap(0) 18 : fSwap(0)
19 #ifdef SK_DEBUG 19 #ifdef SK_DEBUG
20 , fDepth(0) 20 , fDepth(0)
21 #endif 21 #endif
22 { 22 {
23 sk_bzero(fPt, sizeof(fPt)); 23 sk_bzero(fPt, sizeof(fPt));
24 sk_bzero(fT, sizeof(fT)); 24 sk_bzero(fT, sizeof(fT));
25 sk_bzero(fIsCoincident, sizeof(fIsCoincident)); 25 sk_bzero(fIsCoincident, sizeof(fIsCoincident));
26 sk_bzero(&fIsNear, sizeof(fIsNear));
27 reset(); 26 reset();
28 fMax = 0; // require that the caller set the max 27 fMax = 0; // require that the caller set the max
29 } 28 }
30 29
31 class TArray { 30 class TArray {
32 public: 31 public:
33 explicit TArray(const double ts[9]) : fTArray(ts) {} 32 explicit TArray(const double ts[9]) : fTArray(ts) {}
34 double operator[](int n) const { 33 double operator[](int n) const {
35 return fTArray[n]; 34 return fTArray[n];
36 } 35 }
37 const double* fTArray; 36 const double* fTArray;
38 }; 37 };
39 TArray operator[](int n) const { return TArray(fT[n]); } 38 TArray operator[](int n) const { return TArray(fT[n]); }
40 39
41 void set(const SkIntersections& i) { 40 void set(const SkIntersections& i) {
42 memcpy(fPt, i.fPt, sizeof(fPt)); 41 memcpy(fPt, i.fPt, sizeof(fPt));
43 memcpy(fT, i.fT, sizeof(fT)); 42 memcpy(fT, i.fT, sizeof(fT));
44 memcpy(fIsCoincident, i.fIsCoincident, sizeof(fIsCoincident)); 43 memcpy(fIsCoincident, i.fIsCoincident, sizeof(fIsCoincident));
45 memcpy(&fIsNear, &i.fIsNear, sizeof(fIsNear));
46 fUsed = i.fUsed; 44 fUsed = i.fUsed;
47 fMax = i.fMax; 45 fMax = i.fMax;
48 fSwap = i.fSwap; 46 fSwap = i.fSwap;
49 SkDEBUGCODE(fDepth = i.fDepth); 47 SkDEBUGCODE(fDepth = i.fDepth);
50 } 48 }
51 49
52 void allowNear(bool nearAllowed) { 50 void allowNear(bool nearAllowed) {
53 fAllowNear = nearAllowed; 51 fAllowNear = nearAllowed;
54 } 52 }
55 53
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 return insert(two, one, pt); 110 return insert(two, one, pt);
113 } else { 111 } else {
114 return insert(one, two, pt); 112 return insert(one, two, pt);
115 } 113 }
116 } 114 }
117 115
118 bool isCoincident(int index) { 116 bool isCoincident(int index) {
119 return (fIsCoincident[0] & 1 << index) != 0; 117 return (fIsCoincident[0] & 1 << index) != 0;
120 } 118 }
121 119
122 bool isNear(int index) {
123 return (fIsNear & 1 << index) != 0;
124 }
125
126 int lineHorizontal(const SkPoint a[2], SkScalar left, SkScalar right, SkScal ar y, 120 int lineHorizontal(const SkPoint a[2], SkScalar left, SkScalar right, SkScal ar y,
127 bool flipped) { 121 bool flipped) {
128 SkDLine line; 122 SkDLine line;
129 line.set(a); 123 line.set(a);
130 fMax = 2; 124 fMax = 2;
131 return horizontal(line, left, right, y, flipped); 125 return horizontal(line, left, right, y, flipped);
132 } 126 }
133 127
134 int lineVertical(const SkPoint a[2], SkScalar top, SkScalar bottom, SkScalar x, bool flipped) { 128 int lineVertical(const SkPoint a[2], SkScalar top, SkScalar bottom, SkScalar x, bool flipped) {
135 SkDLine line; 129 SkDLine line;
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 bool cubicExactEnd(const SkDCubic& cubic1, bool start, const SkDCubic& cubic 2); 265 bool cubicExactEnd(const SkDCubic& cubic1, bool start, const SkDCubic& cubic 2);
272 void cubicNearEnd(const SkDCubic& cubic1, bool start, const SkDCubic& cubic2 , const SkDRect& ); 266 void cubicNearEnd(const SkDCubic& cubic1, bool start, const SkDCubic& cubic2 , const SkDRect& );
273 void cleanUpParallelLines(bool parallel); 267 void cleanUpParallelLines(bool parallel);
274 void computePoints(const SkDLine& line, int used); 268 void computePoints(const SkDLine& line, int used);
275 // used by addCoincident to remove ordinary intersections in range 269 // used by addCoincident to remove ordinary intersections in range
276 // void remove(double one, double two, const SkDPoint& startPt, const SkDPoin t& endPt); 270 // void remove(double one, double two, const SkDPoint& startPt, const SkDPoin t& endPt);
277 271
278 SkDPoint fPt[9]; // FIXME: since scans store points as SkPoint, this should also 272 SkDPoint fPt[9]; // FIXME: since scans store points as SkPoint, this should also
279 double fT[2][9]; 273 double fT[2][9];
280 uint16_t fIsCoincident[2]; // bit set for each curve's coincident T 274 uint16_t fIsCoincident[2]; // bit set for each curve's coincident T
281 uint16_t fIsNear; // bit set for each T if 2nd curve's point is near but no t equal to 1st
282 unsigned char fUsed; 275 unsigned char fUsed;
283 unsigned char fMax; 276 unsigned char fMax;
284 bool fAllowNear; 277 bool fAllowNear;
285 bool fSwap; 278 bool fSwap;
286 #ifdef SK_DEBUG 279 #ifdef SK_DEBUG
287 int fDepth; 280 int fDepth;
288 #endif 281 #endif
289 }; 282 };
290 283
291 extern int (SkIntersections::*CurveRay[])(const SkPoint[], const SkDLine& ); 284 extern int (SkIntersections::*CurveRay[])(const SkPoint[], const SkDLine& );
292 extern int (SkIntersections::*CurveVertical[])(const SkPoint[], SkScalar top, Sk Scalar bottom, 285 extern int (SkIntersections::*CurveVertical[])(const SkPoint[], SkScalar top, Sk Scalar bottom,
293 SkScalar x, bool flipped); 286 SkScalar x, bool flipped);
294 287
295 #endif 288 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698