29 {
30 while (!chase.
empty()) {
33
37 *endPtr = nullptr;
39 *startPtr = last->start();
40 *endPtr = last->end();
41 #if TRY_ROTATE
43 #else
45 #endif
47 return true;
48 }
50 continue;
51 }
52 int winding;
53 bool sortable;
55 if (!angle) {
57 return true;
58 }
60 continue;
61 }
62 int sumMiWinding, sumSuWinding;
63 if (sortable) {
69 return true;
70 }
75 return true;
76 }
79 swap(sumMiWinding, sumSuWinding);
80 }
81 }
84 while ((angle = angle->
next()) != firstAngle) {
88 int maxWinding = 0, sumWinding = 0, oppMaxWinding = 0, oppSumWinding = 0;
89 if (sortable) {
91 &maxWinding, &sumWinding, &oppMaxWinding, &oppSumWinding);
92 }
93 if (!segment->
done(angle)) {
95 first = segment;
98 }
99
100 if (sortable) {
101 if (!segment->
markAngle(maxWinding, sumWinding, oppMaxWinding,
102 oppSumWinding, angle, nullptr)) {
103 return false;
104 }
105 }
106 }
107 }
108 if (first) {
109 #if TRY_ROTATE
111 #else
113 #endif
115 return true;
116 }
117 }
119 return true;
120}
static void done(const char *config, const char *src, const char *srcOptions, const char *name)
static constexpr int32_t SK_MinS32
const SkOpAngle * AngleWinding(SkOpSpanBase *start, SkOpSpanBase *end, int *windingPtr, bool *sortablePtr)
void swap(sk_sp< T > &a, sk_sp< T > &b)
SkOpSegment * segment() const
SkOpSpanBase * end() const
SkOpSpanBase * start() const
const SkOpSpanBase * span() const
int updateWindingReverse(const SkOpAngle *angle)
void setUpWindings(SkOpSpanBase *start, SkOpSpanBase *end, int *sumMiWinding, int *maxWinding, int *sumWinding)
SkOpGlobalState * globalState() const
SkOpAngle * activeAngle(SkOpSpanBase *start, SkOpSpanBase **startPtr, SkOpSpanBase **endPtr, bool *done)
int updateOppWindingReverse(const SkOpAngle *angle) const
bool markAngle(int maxWinding, int sumWinding, const SkOpAngle *angle, SkOpSpanBase **result)
const SkOpPtT * ptT() const