OLD | NEW |
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 SkPathOpsTypes_DEFINED | 7 #ifndef SkPathOpsTypes_DEFINED |
8 #define SkPathOpsTypes_DEFINED | 8 #define SkPathOpsTypes_DEFINED |
9 | 9 |
10 #include <float.h> // for FLT_EPSILON | 10 #include <float.h> // for FLT_EPSILON |
(...skipping 10 matching lines...) Expand all Loading... |
21 kNo_PathOpsMask = 0, | 21 kNo_PathOpsMask = 0, |
22 kEvenOdd_PathOpsMask = 1 | 22 kEvenOdd_PathOpsMask = 1 |
23 }; | 23 }; |
24 | 24 |
25 // Use Almost Equal when comparing coordinates. Use epsilon to compare T values. | 25 // Use Almost Equal when comparing coordinates. Use epsilon to compare T values. |
26 bool AlmostEqualUlps(float a, float b); | 26 bool AlmostEqualUlps(float a, float b); |
27 inline bool AlmostEqualUlps(double a, double b) { | 27 inline bool AlmostEqualUlps(double a, double b) { |
28 return AlmostEqualUlps(SkDoubleToScalar(a), SkDoubleToScalar(b)); | 28 return AlmostEqualUlps(SkDoubleToScalar(a), SkDoubleToScalar(b)); |
29 } | 29 } |
30 | 30 |
| 31 bool NotAlmostEqualUlps(float a, float b); |
| 32 inline bool NotAlmostEqualUlps(double a, double b) { |
| 33 return NotAlmostEqualUlps(SkDoubleToScalar(a), SkDoubleToScalar(b)); |
| 34 } |
| 35 |
| 36 // Use Almost Bequal when comparing coordinates in conjunction with between. |
| 37 bool AlmostBequalUlps(float a, float b); |
| 38 inline bool AlmostBequalUlps(double a, double b) { |
| 39 return AlmostBequalUlps(SkDoubleToScalar(a), SkDoubleToScalar(b)); |
| 40 } |
| 41 |
31 bool RoughlyEqualUlps(float a, float b); | 42 bool RoughlyEqualUlps(float a, float b); |
32 inline bool RoughlyEqualUlps(double a, double b) { | 43 inline bool RoughlyEqualUlps(double a, double b) { |
33 return RoughlyEqualUlps(SkDoubleToScalar(a), SkDoubleToScalar(b)); | 44 return RoughlyEqualUlps(SkDoubleToScalar(a), SkDoubleToScalar(b)); |
34 } | 45 } |
35 | 46 |
| 47 bool AlmostLessUlps(float a, float b); |
| 48 inline bool AlmostLessUlps(double a, double b) { |
| 49 return AlmostLessUlps(SkDoubleToScalar(a), SkDoubleToScalar(b)); |
| 50 } |
| 51 |
| 52 bool AlmostLessOrEqualUlps(float a, float b); |
| 53 inline bool AlmostLessOrEqualUlps(double a, double b) { |
| 54 return AlmostLessOrEqualUlps(SkDoubleToScalar(a), SkDoubleToScalar(b)); |
| 55 } |
| 56 |
36 bool AlmostBetweenUlps(float a, float b, float c); | 57 bool AlmostBetweenUlps(float a, float b, float c); |
37 inline bool AlmostBetweenUlps(double a, double b, double c) { | 58 inline bool AlmostBetweenUlps(double a, double b, double c) { |
38 return AlmostBetweenUlps(SkDoubleToScalar(a), SkDoubleToScalar(b), SkDoubleT
oScalar(c)); | 59 return AlmostBetweenUlps(SkDoubleToScalar(a), SkDoubleToScalar(b), SkDoubleT
oScalar(c)); |
39 } | 60 } |
40 | 61 |
41 int UlpsDistance(float a, float b); | 62 int UlpsDistance(float a, float b); |
42 inline int UlpsDistance(double a, double b) { | 63 inline int UlpsDistance(double a, double b) { |
43 return UlpsDistance(SkDoubleToScalar(a), SkDoubleToScalar(b)); | 64 return UlpsDistance(SkDoubleToScalar(a), SkDoubleToScalar(b)); |
44 } | 65 } |
45 | 66 |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 /* Returns 1 if negative, 2 if zero, 4 if positive | 288 /* Returns 1 if negative, 2 if zero, 4 if positive |
268 */ | 289 */ |
269 inline int SkDSideBit(double x) { | 290 inline int SkDSideBit(double x) { |
270 return 1 << SKDSide(x); | 291 return 1 << SKDSide(x); |
271 } | 292 } |
272 | 293 |
273 inline double SkPinT(double t) { | 294 inline double SkPinT(double t) { |
274 return precisely_less_than_zero(t) ? 0 : precisely_greater_than_one(t) ? 1 :
t; | 295 return precisely_less_than_zero(t) ? 0 : precisely_greater_than_one(t) ? 1 :
t; |
275 } | 296 } |
276 | 297 |
| 298 #ifdef SK_DEBUG |
| 299 inline void DebugDumpDouble(double x) { |
| 300 if (x == floor(x)) { |
| 301 SkDebugf("%.0f", x); |
| 302 } else { |
| 303 SkDebugf("%1.17g", x); |
| 304 } |
| 305 } |
| 306 |
| 307 inline void DebugDumpFloat(float x) { |
| 308 if (x == floorf(x)) { |
| 309 SkDebugf("%.0f", x); |
| 310 } else { |
| 311 SkDebugf("%1.9gf", x); |
| 312 } |
| 313 } |
277 #endif | 314 #endif |
| 315 |
| 316 #endif |
OLD | NEW |