7#ifndef SkOpSegment_DEFINE
8#define SkOpSegment_DEFINE
38 return fBounds.
fTop < rh.fBounds.
fTop;
50 int* sumMiWinding,
int* sumSuWinding);
75 angle->
set(&fTail, fTail.
prev());
93 angle->
set(&fHead, fHead.
next());
140 const SkOpPtT* debugAddT(
double t, SkPathOpsDebug::GlitchLog* )
const;
144 void debugCheckAngleCoin()
const;
147 void debugCheckHealth(SkPathOpsDebug::GlitchLog* )
const;
148 void debugClearAll(SkPathOpsDebug::GlitchLog* glitches)
const;
149 void debugClearOne(
const SkOpSpan* span, SkPathOpsDebug::GlitchLog* glitches)
const;
160 void debugMissingCoincidence(SkPathOpsDebug::GlitchLog* glitches)
const;
161 void debugMoveMultiples(SkPathOpsDebug::GlitchLog* glitches)
const;
162 void debugMoveNearby(SkPathOpsDebug::GlitchLog* glitches)
const;
168#if DEBUG_ACTIVE_SPANS
169 void debugShowActiveSpans(
SkString* str)
const;
172 void debugShowNewWinding(
const char* fun,
const SkOpSpan* span,
int winding);
173 void debugShowNewWinding(
const char* fun,
const SkOpSpan* span,
int winding,
int oppWinding);
179#if DEBUG_COINCIDENCE_ORDER
180 void debugResetCoinT()
const;
181 void debugSetCoinT(
int,
SkScalar )
const;
185 static void DebugClearVisited(
const SkOpSpanBase* span);
187 bool debugVisited()
const {
188 if (!fDebugVisited) {
189 fDebugVisited =
true;
197 double distSq(
double t,
const SkOpAngle* opp)
const;
202 return fDoneCount == fCount;
227 SkPathOp op,
int xorMiMask,
int xorSuMask);
294 bool markAngle(
int maxWinding,
int sumWinding,
int oppMaxWinding,
int oppSumWinding,
313 :
end->upCast()->oppValue();
348 void resetDebugVisited()
const {
349 fDebugVisited =
false;
371 *maxWinding = *sumWinding;
375 *sumWinding -= deltaSum;
379 int* maxWinding,
int* sumWinding);
381 int* maxWinding,
int* sumWinding,
int* oppMaxWinding,
int* oppSumWinding);
387 :
end->upCast()->windValue();
453 mutable bool fDebugVisited;
455#if DEBUG_COINCIDENCE_ORDER
456 mutable int fDebugBaseIndex;
459 mutable int fDebugLastIndex;
static int step(int x, SkScalar min, SkScalar max)
#define check(reporter, ref, unref, make, kill)
static constexpr int32_t SK_MinS32
static SkDPoint(*const CurveDPointAtT[])(const SkPoint[], SkScalar, double)
static bool(*const CurveIsVertical[])(const SkPoint[], SkScalar, double, double)
static SkDVector(*const CurveDSlopeAtT[])(const SkPoint[], SkScalar, double)
static SkPoint(*const CurvePointAtT[])(const SkPoint[], SkScalar, double)
#define SkDEBUGRELEASE(a, b)
int SkPathOpsVerbToPoints(SkPath::Verb verb)
SkDEBUGCODE(SK_SPI) SkThreadID SkGetThreadID()
auto make(Ctor &&ctor) -> decltype(ctor(nullptr))
SkOpSpanBase * end() const
void set(SkOpSpanBase *start, SkOpSpanBase *end)
SkOpSpanBase * start() const
SkArenaAlloc * allocator()
void setAllocatedOpSpan()
void addOpp(SkOpPtT *opp, SkOpPtT *oppPrev)
const SkOpSegment * segment() const
SkDVector dSlopeAtT(double mid) const
bool markWinding(SkOpSpan *, int winding)
bool isVertical(SkOpSpanBase *start, SkOpSpanBase *end) const
SkOpContour * debugContour(int id) const
void dumpPtsInner(const char *prefix="seg") const
int computeSum(SkOpSpanBase *start, SkOpSpanBase *end, SkOpAngle::IncludeType includeType)
SkOpSegment * addConic(SkPoint pts[3], SkScalar weight, SkOpContour *parent)
void debugValidate() const
const SkOpPtT * debugPtT(int id) const
void joinEnds(SkOpSegment *start)
bool done(const SkOpAngle *angle) const
SkOpSpanBase::Collapsed collapsed(double startT, double endT) const
bool match(const SkOpPtT *span, const SkOpSegment *parent, double t, const SkPoint &pt) const
SkOpPtT * addMissing(double t, SkOpSegment *opp, bool *allExist)
SkPath::Verb verb() const
SkOpSegment * addLine(SkPoint pts[2], SkOpContour *parent)
const SkPoint & lastPt() const
void setContour(SkOpContour *contour)
const SkOpCoincidence * debugCoincidence() const
bool testForCoincidence(const SkOpPtT *priorPtT, const SkOpPtT *ptT, const SkOpSpanBase *prior, const SkOpSpanBase *spanBase, const SkOpSegment *opp) const
SkOpSpan * findSortableTop(SkOpContour *)
int windSum(const SkOpAngle *angle) const
SkOpSegment * findNextOp(SkTDArray< SkOpSpanBase * > *chase, SkOpSpanBase **nextStart, SkOpSpanBase **nextEnd, bool *unsortable, bool *simple, SkPathOp op, int xorMiMask, int xorSuMask)
bool operator<(const SkOpSegment &rh) const
bool ptsDisjoint(const SkOpPtT &span, const SkOpPtT &test) const
bool isClose(double t, const SkOpSegment *opp) const
SkPoint ptAtT(double mid) const
void setPrev(SkOpSegment *prev)
SkOpSegment * nextChase(SkOpSpanBase **, int *step, SkOpSpan **, SkOpSpanBase **last) const
void rayCheck(const SkOpRayHit &base, SkOpRayDir dir, SkOpRayHit **hits, SkArenaAlloc *)
SkOpSegment * isSimple(SkOpSpanBase **end, int *step) const
const SkPathOpsBounds & bounds() const
const SkOpSegment * prev() const
SkOpAngle * activeAngleOther(SkOpSpanBase *start, SkOpSpanBase **startPtr, SkOpSpanBase **endPtr, bool *done)
const SkOpSpanBase * tail() const
bool activeWinding(SkOpSpanBase *start, SkOpSpanBase *end)
int updateWindingReverse(const SkOpAngle *angle)
static int SpanSign(const SkOpSpanBase *start, const SkOpSpanBase *end)
void init(SkPoint pts[], SkScalar weight, SkOpContour *parent, SkPath::Verb verb)
bool markAndChaseDone(SkOpSpanBase *start, SkOpSpanBase *end, SkOpSpanBase **found)
void setUpWindings(SkOpSpanBase *start, SkOpSpanBase *end, int *sumMiWinding, int *maxWinding, int *sumWinding)
bool markAndChaseWinding(SkOpSpanBase *start, SkOpSpanBase *end, int winding, SkOpSpanBase **lastPtr)
SkOpAngle * debugLastAngle()
SkOpGlobalState * globalState() const
SkOpAngle * activeAngleInner(SkOpSpanBase *start, SkOpSpanBase **startPtr, SkOpSpanBase **endPtr, bool *done)
SkOpSpan * insert(SkOpSpan *prev)
void setUpWinding(SkOpSpanBase *start, SkOpSpanBase *end, int *maxWinding, int *sumWinding)
void release(const SkOpSpan *)
static void ClearVisited(SkOpSpanBase *span)
static int OppSign(const SkOpSpanBase *start, const SkOpSpanBase *end)
int updateWinding(SkOpSpanBase *start, SkOpSpanBase *end)
bool subDivide(const SkOpSpanBase *start, const SkOpSpanBase *end, SkDCurve *result) const
const SkOpPtT * existing(double t, const SkOpSegment *opp) const
static bool ComputeOneSum(const SkOpAngle *baseAngle, SkOpAngle *nextAngle, SkOpAngle::IncludeType)
const SkOpSpan * head() const
bool addCurveTo(const SkOpSpanBase *start, const SkOpSpanBase *end, SkPathWriter *path) const
SkOpSegment * addCubic(SkPoint pts[4], SkOpContour *parent)
void debugAddAngle(double startT, double endT)
bool ptsDisjoint(const SkOpPtT &span, double t, const SkPoint &pt) const
SkOpAngle * activeAngle(SkOpSpanBase *start, SkOpSpanBase **startPtr, SkOpSpanBase **endPtr, bool *done)
static bool UseInnerWinding(int outerWinding, int innerWinding)
void setNext(SkOpSegment *next)
bool activeOp(SkOpSpanBase *start, SkOpSpanBase *end, int xorMiMask, int xorSuMask, SkPathOp op)
SkOpAngle * spanToAngle(SkOpSpanBase *start, SkOpSpanBase *end)
SkDPoint dPtAtT(double mid) const
bool contains(double t) const
const SkPoint * pts() const
SkOpSegment * addQuad(SkPoint pts[3], SkOpContour *parent)
const SkOpSpanBase * debugSpan(int id) const
const SkOpAngle * debugAngle(int id) const
bool missingCoincidence()
void dumpPts(const char *prefix="seg") const
void clearOne(SkOpSpan *span)
int updateOppWindingReverse(const SkOpAngle *angle) const
static bool ComputeOneSumReverse(SkOpAngle *baseAngle, SkOpAngle *nextAngle, SkOpAngle::IncludeType)
SkOpSpan * windingSpanAtT(double tHit)
SkOpSegment * findNextWinding(SkTDArray< SkOpSpanBase * > *chase, SkOpSpanBase **nextStart, SkOpSpanBase **nextEnd, bool *unsortable)
SkOpSegment * next() const
const SkOpSegment * debugSegment(int id) const
SkOpAngle * addStartSpan()
bool isHorizontal() const
SkOpContour * contour() const
bool spansNearby(const SkOpSpanBase *ref, const SkOpSpanBase *check, bool *found) const
bool markAngle(int maxWinding, int sumWinding, const SkOpAngle *angle, SkOpSpanBase **result)
void markDone(SkOpSpan *)
SkOpSegment * findNextXor(SkOpSpanBase **nextStart, SkOpSpanBase **nextEnd, bool *unsortable)
bool addExpanded(double newT, const SkOpSpanBase *test, bool *startOver)
int updateOppWinding(const SkOpSpanBase *start, const SkOpSpanBase *end) const
const SkOpSpan * prev() const
void setFromAngle(SkOpAngle *angle)
const SkOpSpan * starter(const SkOpSpanBase *end) const
const SkOpPtT * ptT() const
void setToAngle(SkOpAngle *angle)
SkOpSpanBase * next() const
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir Path to the cache directory This is different from the persistent_cache_path in embedder which is used for Skia shader cache icu native lib Path to the library file that exports the ICU data vm service The hostname IP address on which the Dart VM Service should be served If not defaults to or::depending on whether ipv6 is specified vm service A custom Dart VM Service port The default is to pick a randomly available open port disable vm Disable the Dart VM Service The Dart VM Service is never available in release mode disable vm service Disable mDNS Dart VM Service publication Bind to the IPv6 localhost address for the Dart VM Service Ignored if vm service host is set endless trace Enable an endless trace buffer The default is a ring buffer This is useful when very old events need to viewed For during application launch Memory usage will continue to grow indefinitely however Start app with an specific route defined on the framework flutter assets dir
const SkDConic & set(const SkPoint pts[kPointCount], SkScalar weight SkDEBUGPARAMS(SkOpGlobalState *state=nullptr))
const SkDCubic & set(const SkPoint pts[kPointCount] SkDEBUGPARAMS(SkOpGlobalState *state=nullptr))
void setCubicBounds(const SkPoint curve[4], SkScalar, double s, double e, SkPathOpsBounds *)
void setConicBounds(const SkPoint curve[3], SkScalar curveWeight, double s, double e, SkPathOpsBounds *)
void setQuadBounds(const SkPoint curve[3], SkScalar, double s, double e, SkPathOpsBounds *)
const SkDQuad & set(const SkPoint pts[kPointCount] SkDEBUGPARAMS(SkOpGlobalState *state=nullptr))
SkScalar fBottom
larger y-axis bounds
SkScalar fLeft
smaller x-axis bounds
SkScalar fRight
larger x-axis bounds
void setBounds(const SkPoint pts[], int count)
SkScalar fTop
smaller y-axis bounds