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

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

Issue 1394503003: fix some pathops bugs found in 1M skps (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: init to avoid warning Created 5 years, 2 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/pathops/SkAddIntersections.cpp ('k') | src/pathops/SkOpAngle.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 * 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 "SkPathOpsConic.h" 10 #include "SkPathOpsConic.h"
11 #include "SkPathOpsCubic.h" 11 #include "SkPathOpsCubic.h"
12 #include "SkPathOpsLine.h" 12 #include "SkPathOpsLine.h"
13 #include "SkPathOpsPoint.h" 13 #include "SkPathOpsPoint.h"
14 #include "SkPathOpsQuad.h" 14 #include "SkPathOpsQuad.h"
15 15
16 class SkIntersections { 16 class SkIntersections {
17 public: 17 public:
18 SkIntersections() 18 SkIntersections()
19 : fSwap(0) 19 : fSwap(0)
20 #ifdef SK_DEBUG 20 #ifdef SK_DEBUG
21 , fDepth(0) 21 , fDepth(0)
22 #endif 22 #endif
23 { 23 {
24 sk_bzero(fPt, sizeof(fPt)); 24 sk_bzero(fPt, sizeof(fPt));
25 sk_bzero(fPt2, sizeof(fPt2)); 25 sk_bzero(fPt2, sizeof(fPt2));
26 sk_bzero(fT, sizeof(fT)); 26 sk_bzero(fT, sizeof(fT));
27 sk_bzero(fNearlySame, sizeof(fNearlySame)); 27 sk_bzero(fNearlySame, sizeof(fNearlySame));
28 #if DEBUG_T_SECT_LOOP_COUNT
29 sk_bzero(fDebugLoopCount, sizeof(fDebugLoopCount));
30 #endif
28 reset(); 31 reset();
29 fMax = 0; // require that the caller set the max 32 fMax = 0; // require that the caller set the max
30 } 33 }
31 34
32 class TArray { 35 class TArray {
33 public: 36 public:
34 explicit TArray(const double ts[10]) : fTArray(ts) {} 37 explicit TArray(const double ts[10]) : fTArray(ts) {}
35 double operator[](int n) const { 38 double operator[](int n) const {
36 return fTArray[n]; 39 return fTArray[n];
37 } 40 }
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 static int VerticalIntercept(const SkDConic& conic, SkScalar x, double* root s); 273 static int VerticalIntercept(const SkDConic& conic, SkScalar x, double* root s);
271 274
272 int depth() const { 275 int depth() const {
273 #ifdef SK_DEBUG 276 #ifdef SK_DEBUG
274 return fDepth; 277 return fDepth;
275 #else 278 #else
276 return 0; 279 return 0;
277 #endif 280 #endif
278 } 281 }
279 282
283 enum DebugLoop {
284 kIterations_DebugLoop,
285 kCoinCheck_DebugLoop,
286 kComputePerp_DebugLoop,
287 };
288
289 void debugBumpLoopCount(DebugLoop );
280 int debugCoincidentUsed() const; 290 int debugCoincidentUsed() const;
291 int debugLoopCount(DebugLoop ) const;
292 void debugResetLoopCount();
281 void dump() const; // implemented for testing only 293 void dump() const; // implemented for testing only
282 294
283 private: 295 private:
284 bool cubicCheckCoincidence(const SkDCubic& c1, const SkDCubic& c2); 296 bool cubicCheckCoincidence(const SkDCubic& c1, const SkDCubic& c2);
285 bool cubicExactEnd(const SkDCubic& cubic1, bool start, const SkDCubic& cubic 2); 297 bool cubicExactEnd(const SkDCubic& cubic1, bool start, const SkDCubic& cubic 2);
286 void cubicNearEnd(const SkDCubic& cubic1, bool start, const SkDCubic& cubic2 , const SkDRect& ); 298 void cubicNearEnd(const SkDCubic& cubic1, bool start, const SkDCubic& cubic2 , const SkDRect& );
287 void cleanUpParallelLines(bool parallel); 299 void cleanUpParallelLines(bool parallel);
288 void computePoints(const SkDLine& line, int used); 300 void computePoints(const SkDLine& line, int used);
289 301
290 SkDPoint fPt[12]; // FIXME: since scans store points as SkPoint, this shoul d also 302 SkDPoint fPt[12]; // FIXME: since scans store points as SkPoint, this shoul d also
291 SkDPoint fPt2[2]; // used by nearly same to store alternate intersection po int 303 SkDPoint fPt2[2]; // used by nearly same to store alternate intersection po int
292 double fT[2][12]; 304 double fT[2][12];
293 uint16_t fIsCoincident[2]; // bit set for each curve's coincident T 305 uint16_t fIsCoincident[2]; // bit set for each curve's coincident T
294 bool fNearlySame[2]; // true if end points nearly match 306 bool fNearlySame[2]; // true if end points nearly match
295 unsigned char fUsed; 307 unsigned char fUsed;
296 unsigned char fMax; 308 unsigned char fMax;
297 bool fAllowNear; 309 bool fAllowNear;
298 bool fSwap; 310 bool fSwap;
299 #ifdef SK_DEBUG 311 #ifdef SK_DEBUG
300 int fDepth; 312 int fDepth;
301 #endif 313 #endif
314 #if DEBUG_T_SECT_LOOP_COUNT
315 int fDebugLoopCount[3];
316 #endif
302 }; 317 };
303 318
304 #endif 319 #endif
OLDNEW
« no previous file with comments | « src/pathops/SkAddIntersections.cpp ('k') | src/pathops/SkOpAngle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698