Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Attributes | List of all members
SkOpPtT Class Reference

#include <SkOpSpan.h>

Public Types

enum  { kIsAlias = 1 , kIsDuplicate = 1 }
 

Public Member Functions

const SkOpPtTactive () const
 
void addOpp (SkOpPtT *opp, SkOpPtT *oppPrev)
 
bool alias () const
 
bool coincident () const
 
bool contains (const SkOpPtT *) const
 
bool contains (const SkOpSegment *, const SkPoint &) const
 
bool contains (const SkOpSegment *, double t) const
 
const SkOpPtTcontains (const SkOpSegment *) const
 
SkOpContourcontour () const
 
int debugID () const
 
void debugAddOpp (const SkOpPtT *opp, const SkOpPtT *oppPrev) const
 
const SkOpAngledebugAngle (int id) const
 
const SkOpCoincidencedebugCoincidence () const
 
bool debugContains (const SkOpPtT *) const
 
const SkOpPtTdebugContains (const SkOpSegment *check) const
 
SkOpContourdebugContour (int id) const
 
const SkOpPtTdebugEnder (const SkOpPtT *end) const
 
int debugLoopLimit (bool report) const
 
bool debugMatchID (int id) const
 
const SkOpPtTdebugOppPrev (const SkOpPtT *opp) const
 
const SkOpPtTdebugPtT (int id) const
 
void debugResetCoinT () const
 
const SkOpSegmentdebugSegment (int id) const
 
void debugSetCoinT (int) const
 
const SkOpSpanBasedebugSpan (int id) const
 
void debugValidate () const
 
bool deleted () const
 
bool duplicate () const
 
void dump () const
 
void dumpAll () const
 
void dumpBase () const
 
const SkOpPtTfind (const SkOpSegment *) const
 
SkOpGlobalStateglobalState () const
 
void init (SkOpSpanBase *, double t, const SkPoint &, bool dup)
 
void insert (SkOpPtT *span)
 
const SkOpPtTnext () const
 
SkOpPtTnext ()
 
bool onEnd () const
 
SkOpPtToppPrev (const SkOpPtT *opp) const
 
bool ptAlreadySeen (const SkOpPtT *head) const
 
SkOpPtTprev ()
 
const SkOpSegmentsegment () const
 
SkOpSegmentsegment ()
 
void setCoincident () const
 
void setDeleted ()
 
void setSpan (const SkOpSpanBase *span)
 
const SkOpSpanBasespan () const
 
SkOpSpanBasespan ()
 
const SkOpPtTstarter (const SkOpPtT *end) const
 

Static Public Member Functions

static bool Overlaps (const SkOpPtT *s1, const SkOpPtT *e1, const SkOpPtT *s2, const SkOpPtT *e2, const SkOpPtT **sOut, const SkOpPtT **eOut)
 

Public Attributes

double fT
 
SkPoint fPt
 

Protected Attributes

SkOpSpanBasefSpan
 
SkOpPtTfNext
 
bool fDeleted
 
bool fDuplicatePt
 
bool fCoincident
 

Detailed Description

Definition at line 24 of file SkOpSpan.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
kIsAlias 
kIsDuplicate 

Definition at line 26 of file SkOpSpan.h.

26 {
27 kIsAlias = 1,
28 kIsDuplicate = 1
29 };
@ kIsAlias
Definition SkOpSpan.h:27
@ kIsDuplicate
Definition SkOpSpan.h:28

Member Function Documentation

◆ active()

const SkOpPtT * SkOpPtT::active ( ) const

Definition at line 22 of file SkOpSpan.cpp.

22 {
23 if (!fDeleted) {
24 return this;
25 }
26 const SkOpPtT* ptT = this;
27 const SkOpPtT* stopPtT = ptT;
28 while ((ptT = ptT->next()) != stopPtT) {
29 if (ptT->fSpan == fSpan && !ptT->fDeleted) {
30 return ptT;
31 }
32 }
33 return nullptr; // should never return deleted; caller must abort
34}
bool fDeleted
Definition SkOpSpan.h:171
const SkOpPtT * next() const
Definition SkOpSpan.h:93
SkOpSpanBase * fSpan
Definition SkOpSpan.h:169

◆ addOpp()

void SkOpPtT::addOpp ( SkOpPtT opp,
SkOpPtT oppPrev 
)
inline

Definition at line 34 of file SkOpSpan.h.

34 {
35 SkOpPtT* oldNext = this->fNext;
36 SkASSERT(this != opp);
37 this->fNext = opp;
38 SkASSERT(oppPrev != oldNext);
39 oppPrev->fNext = oldNext;
40 }
#define SkASSERT(cond)
Definition SkAssert.h:116
SkOpPtT * oppPrev(const SkOpPtT *opp) const
Definition SkOpSpan.h:104
SkOpPtT * fNext
Definition SkOpSpan.h:170

◆ alias()

bool SkOpPtT::alias ( ) const

Definition at line 18 of file SkOpSpan.cpp.

18 {
19 return this->span()->ptT() != this;
20}
const SkOpSpanBase * span() const
Definition SkOpSpan.h:154
const SkOpPtT * ptT() const
Definition SkOpSpan.h:310

◆ coincident()

bool SkOpPtT::coincident ( ) const
inline

Definition at line 43 of file SkOpSpan.h.

43{ return fCoincident; }
bool fCoincident
Definition SkOpSpan.h:174

◆ contains() [1/4]

bool SkOpPtT::contains ( const SkOpPtT check) const

Definition at line 36 of file SkOpSpan.cpp.

36 {
37 SkOPASSERT(this != check);
38 const SkOpPtT* ptT = this;
39 const SkOpPtT* stopPtT = ptT;
40 while ((ptT = ptT->next()) != stopPtT) {
41 if (ptT == check) {
42 return true;
43 }
44 }
45 return false;
46}
#define check(reporter, ref, unref, make, kill)
#define SkOPASSERT(cond)

◆ contains() [2/4]

const SkOpPtT * SkOpPtT::contains ( const SkOpSegment check) const

Definition at line 71 of file SkOpSpan.cpp.

71 {
72 SkASSERT(this->segment() != check);
73 const SkOpPtT* ptT = this;
74 const SkOpPtT* stopPtT = ptT;
75 while ((ptT = ptT->next()) != stopPtT) {
76 if (ptT->segment() == check && !ptT->deleted()) {
77 return ptT;
78 }
79 }
80 return nullptr;
81}
bool deleted() const
Definition SkOpSpan.h:71
const SkOpSegment * segment() const
Definition SkOpSpan.cpp:144

◆ contains() [3/4]

bool SkOpPtT::contains ( const SkOpSegment segment,
const SkPoint pt 
) const

Definition at line 48 of file SkOpSpan.cpp.

48 {
49 SkASSERT(this->segment() != segment);
50 const SkOpPtT* ptT = this;
51 const SkOpPtT* stopPtT = ptT;
52 while ((ptT = ptT->next()) != stopPtT) {
53 if (ptT->fPt == pt && ptT->segment() == segment) {
54 return true;
55 }
56 }
57 return false;
58}
SkPoint fPt
Definition SkOpSpan.h:167

◆ contains() [4/4]

bool SkOpPtT::contains ( const SkOpSegment segment,
double  t 
) const

Definition at line 60 of file SkOpSpan.cpp.

60 {
61 const SkOpPtT* ptT = this;
62 const SkOpPtT* stopPtT = ptT;
63 while ((ptT = ptT->next()) != stopPtT) {
64 if (ptT->fT == t && ptT->segment() == segment) {
65 return true;
66 }
67 }
68 return false;
69}
double fT
Definition SkOpSpan.h:166

◆ contour()

SkOpContour * SkOpPtT::contour ( ) const

Definition at line 83 of file SkOpSpan.cpp.

83 {
84 return segment()->contour();
85}
SkOpContour * contour() const

◆ debugAddOpp()

void SkOpPtT::debugAddOpp ( const SkOpPtT opp,
const SkOpPtT oppPrev 
) const

Definition at line 2678 of file SkPathOpsDebug.cpp.

2678 {
2679 SkDEBUGCODE(const SkOpPtT* oldNext = this->fNext);
2680 SkASSERT(this != opp);
2681// this->fNext = opp;
2682 SkASSERT(oppPrev != oldNext);
2683// oppPrev->fNext = oldNext;
2684}
#define SkDEBUGCODE(...)
Definition SkDebug.h:23

◆ debugAngle()

const SkOpAngle * SkOpPtT::debugAngle ( int  id) const

Definition at line 662 of file PathOpsDebug.cpp.

662 {
663 return this->span()->debugAngle(id);
664}
const SkOpAngle * debugAngle(int id) const

◆ debugCoincidence()

const SkOpCoincidence * SkOpPtT::debugCoincidence ( ) const

Definition at line 670 of file PathOpsDebug.cpp.

670 {
671 return this->span()->debugCoincidence();
672}
const SkOpCoincidence * debugCoincidence() const

◆ debugContains() [1/2]

bool SkOpPtT::debugContains ( const SkOpPtT check) const

Definition at line 2686 of file SkPathOpsDebug.cpp.

2686 {
2687 SkASSERT(this != check);
2688 const SkOpPtT* ptT = this;
2689 int links = 0;
2690 do {
2691 ptT = ptT->next();
2692 if (ptT == check) {
2693 return true;
2694 }
2695 ++links;
2696 const SkOpPtT* test = this;
2697 for (int index = 0; index < links; ++index) {
2698 if (ptT == test) {
2699 return false;
2700 }
2701 test = test->next();
2702 }
2703 } while (true);
2704}

◆ debugContains() [2/2]

const SkOpPtT * SkOpPtT::debugContains ( const SkOpSegment check) const

Definition at line 2706 of file SkPathOpsDebug.cpp.

2706 {
2707 SkASSERT(this->segment() != check);
2708 const SkOpPtT* ptT = this;
2709 int links = 0;
2710 do {
2711 ptT = ptT->next();
2712 if (ptT->segment() == check) {
2713 return ptT;
2714 }
2715 ++links;
2716 const SkOpPtT* test = this;
2717 for (int index = 0; index < links; ++index) {
2718 if (ptT == test) {
2719 return nullptr;
2720 }
2721 test = test->next();
2722 }
2723 } while (true);
2724}

◆ debugContour()

SkOpContour * SkOpPtT::debugContour ( int  id) const

Definition at line 666 of file PathOpsDebug.cpp.

666 {
667 return this->span()->debugContour(id);
668}
SkOpContour * debugContour(int id) const

◆ debugEnder()

const SkOpPtT * SkOpPtT::debugEnder ( const SkOpPtT end) const

Definition at line 2726 of file SkPathOpsDebug.cpp.

2726 {
2727 return fT < end->fT ? end : this;
2728}
glong glong end

◆ debugID()

int SkOpPtT::debugID ( ) const
inline

Definition at line 50 of file SkOpSpan.h.

50 {
51 return SkDEBUGRELEASE(fID, -1);
52 }
#define SkDEBUGRELEASE(a, b)

◆ debugLoopLimit()

int SkOpPtT::debugLoopLimit ( bool  report) const

Definition at line 2730 of file SkPathOpsDebug.cpp.

2730 {
2731 int loop = 0;
2732 const SkOpPtT* next = this;
2733 do {
2734 for (int check = 1; check < loop - 1; ++check) {
2735 const SkOpPtT* checkPtT = this->fNext;
2736 const SkOpPtT* innerPtT = checkPtT;
2737 for (int inner = check + 1; inner < loop; ++inner) {
2738 innerPtT = innerPtT->fNext;
2739 if (checkPtT == innerPtT) {
2740 if (report) {
2741 SkDebugf("*** bad ptT loop ***\n");
2742 }
2743 return loop;
2744 }
2745 }
2746 }
2747 // there's nothing wrong with extremely large loop counts -- but this may appear to hang
2748 // by taking a very long time to figure out that no loop entry is a duplicate
2749 // -- and it's likely that a large loop count is indicative of a bug somewhere
2750 if (++loop > 1000) {
2751 SkDebugf("*** loop count exceeds 1000 ***\n");
2752 return 1000;
2753 }
2754 } while ((next = next->fNext) && next != this);
2755 return 0;
2756}
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1

◆ debugMatchID()

bool SkOpPtT::debugMatchID ( int  id) const

Definition at line 650 of file PathOpsDebug.cpp.

650 {
651 int limit = this->debugLoopLimit(false);
652 int loop = 0;
653 const SkOpPtT* ptT = this;
654 do {
655 if (ptT->debugID() == id) {
656 return true;
657 }
658 } while ((!limit || ++loop <= limit) && (ptT = ptT->next()) && ptT != this);
659 return false;
660}
int debugLoopLimit(bool report) const
int debugID() const
Definition SkOpSpan.h:50

◆ debugOppPrev()

const SkOpPtT * SkOpPtT::debugOppPrev ( const SkOpPtT opp) const

Definition at line 2758 of file SkPathOpsDebug.cpp.

2758 {
2759 return this->oppPrev(const_cast<SkOpPtT*>(opp));
2760}

◆ debugPtT()

const SkOpPtT * SkOpPtT::debugPtT ( int  id) const

Definition at line 674 of file PathOpsDebug.cpp.

674 {
675 return this->span()->debugPtT(id);
676}
const SkOpPtT * debugPtT(int id) const

◆ debugResetCoinT()

void SkOpPtT::debugResetCoinT ( ) const

Definition at line 2762 of file SkPathOpsDebug.cpp.

2762 {
2763#if DEBUG_COINCIDENCE_ORDER
2764 this->segment()->debugResetCoinT();
2765#endif
2766}

◆ debugSegment()

const SkOpSegment * SkOpPtT::debugSegment ( int  id) const

Definition at line 678 of file PathOpsDebug.cpp.

678 {
679 return this->span()->debugSegment(id);
680}
const SkOpSegment * debugSegment(int id) const

◆ debugSetCoinT()

void SkOpPtT::debugSetCoinT ( int  index) const

Definition at line 2768 of file SkPathOpsDebug.cpp.

2768 {
2769#if DEBUG_COINCIDENCE_ORDER
2770 this->segment()->debugSetCoinT(index, fT);
2771#endif
2772}

◆ debugSpan()

const SkOpSpanBase * SkOpPtT::debugSpan ( int  id) const

Definition at line 682 of file PathOpsDebug.cpp.

682 {
683 return this->span()->debugSpan(id);
684}
const SkOpSpanBase * debugSpan(int id) const

◆ debugValidate()

void SkOpPtT::debugValidate ( ) const

Definition at line 2774 of file SkPathOpsDebug.cpp.

2774 {
2775#if DEBUG_COINCIDENCE
2776 if (this->globalState()->debugCheckHealth()) {
2777 return;
2778 }
2779#endif
2780#if DEBUG_VALIDATE
2781 SkOpPhase phase = contour()->globalState()->phase();
2782 if (phase == SkOpPhase::kIntersecting || phase == SkOpPhase::kFixWinding) {
2783 return;
2784 }
2785 SkASSERT(fNext);
2786 SkASSERT(fNext != this);
2788 SkASSERT(debugLoopLimit(false) == 0);
2789#endif
2790}
SkOpPhase
SkOpGlobalState * globalState() const
SkOpPhase phase() const
SkOpGlobalState * globalState() const
Definition SkOpSpan.cpp:100
SkOpContour * contour() const
Definition SkOpSpan.cpp:83

◆ deleted()

bool SkOpPtT::deleted ( ) const
inline

Definition at line 71 of file SkOpSpan.h.

71 {
72 return fDeleted;
73 }

◆ dump()

void SkOpPtT::dump ( ) const

Definition at line 686 of file PathOpsDebug.cpp.

686 {
687 SkDebugf("seg=%d span=%d ptT=%d",
688 this->segment()->debugID(), this->span()->debugID(), this->debugID());
689 this->dumpBase();
690 SkDebugf("\n");
691}
void dumpBase() const

◆ dumpAll()

void SkOpPtT::dumpAll ( ) const

Definition at line 693 of file PathOpsDebug.cpp.

693 {
694 contour()->indentDump();
695 const SkOpPtT* next = this;
696 int limit = debugLoopLimit(true);
697 int loop = 0;
698 do {
699 SkDebugf("%.*s", contour()->debugIndent(), " ");
700 SkDebugf("seg=%d span=%d ptT=%d",
701 next->segment()->debugID(), next->span()->debugID(), next->debugID());
702 next->dumpBase();
703 SkDebugf("\n");
704 if (limit && ++loop >= limit) {
705 SkDebugf("*** abort loop ***\n");
706 break;
707 }
708 } while ((next = next->fNext) && next != this);
709 contour()->outdentDump();
710}
void indentDump() const
void outdentDump() const
int debugID() const
int debugID() const
Definition SkOpSpan.h:224

◆ dumpBase()

void SkOpPtT::dumpBase ( ) const

Definition at line 712 of file PathOpsDebug.cpp.

712 {
713 SkDebugf(" t=%1.9g pt=(%1.9g,%1.9g)%s%s%s", this->fT, this->fPt.fX, this->fPt.fY,
714 this->fCoincident ? " coin" : "",
715 this->fDuplicatePt ? " dup" : "", this->fDeleted ? " deleted" : "");
716}
bool fDuplicatePt
Definition SkOpSpan.h:172
float fX
x-axis value

◆ duplicate()

bool SkOpPtT::duplicate ( ) const
inline

Definition at line 75 of file SkOpSpan.h.

75 {
76 return fDuplicatePt;
77 }

◆ find()

const SkOpPtT * SkOpPtT::find ( const SkOpSegment segment) const

Definition at line 87 of file SkOpSpan.cpp.

87 {
88 const SkOpPtT* ptT = this;
89 const SkOpPtT* stopPtT = ptT;
90 do {
91 if (ptT->segment() == segment && !ptT->deleted()) {
92 return ptT;
93 }
94 ptT = ptT->fNext;
95 } while (stopPtT != ptT);
96// SkASSERT(0);
97 return nullptr;
98}

◆ globalState()

SkOpGlobalState * SkOpPtT::globalState ( ) const

Definition at line 100 of file SkOpSpan.cpp.

100 {
101 return contour()->globalState();
102}

◆ init()

void SkOpPtT::init ( SkOpSpanBase span,
double  t,
const SkPoint pt,
bool  dup 
)

Definition at line 104 of file SkOpSpan.cpp.

104 {
105 fT = t;
106 fPt = pt;
107 fSpan = span;
108 fNext = this;
110 fDeleted = false;
111 fCoincident = false;
112 SkDEBUGCODE(fID = span->globalState()->nextPtTID());
113}
bool duplicate() const
Definition SkOpSpan.h:75
SkOpGlobalState * globalState() const
Definition SkOpSpan.cpp:239

◆ insert()

void SkOpPtT::insert ( SkOpPtT span)
inline

Definition at line 87 of file SkOpSpan.h.

87 {
88 SkASSERT(span != this);
89 span->fNext = fNext;
90 fNext = span;
91 }

◆ next() [1/2]

SkOpPtT * SkOpPtT::next ( )
inline

Definition at line 97 of file SkOpSpan.h.

97 {
98 return fNext;
99 }

◆ next() [2/2]

const SkOpPtT * SkOpPtT::next ( ) const
inline

Definition at line 93 of file SkOpSpan.h.

93 {
94 return fNext;
95 }

◆ onEnd()

bool SkOpPtT::onEnd ( ) const

Definition at line 115 of file SkOpSpan.cpp.

115 {
116 const SkOpSpanBase* span = this->span();
117 if (span->ptT() != this) {
118 return false;
119 }
120 const SkOpSegment* segment = this->segment();
121 return span == segment->head() || span == segment->tail();
122}
const SkOpSpanBase * tail() const
const SkOpSpan * head() const

◆ oppPrev()

SkOpPtT * SkOpPtT::oppPrev ( const SkOpPtT opp) const
inline

Definition at line 104 of file SkOpSpan.h.

104 {
105 // find the fOpp ptr to opp
106 SkOpPtT* oppPrev = opp->fNext;
107 if (oppPrev == this) {
108 return nullptr;
109 }
110 while (oppPrev->fNext != opp) {
112 if (oppPrev == this) {
113 return nullptr;
114 }
115 }
116 return oppPrev;
117 }

◆ Overlaps()

static bool SkOpPtT::Overlaps ( const SkOpPtT s1,
const SkOpPtT e1,
const SkOpPtT s2,
const SkOpPtT e2,
const SkOpPtT **  sOut,
const SkOpPtT **  eOut 
)
inlinestatic

Definition at line 119 of file SkOpSpan.h.

120 {
121 const SkOpPtT* start1 = s1->fT < e1->fT ? s1 : e1;
122 const SkOpPtT* start2 = s2->fT < e2->fT ? s2 : e2;
123 *sOut = between(s1->fT, start2->fT, e1->fT) ? start2
124 : between(s2->fT, start1->fT, e2->fT) ? start1 : nullptr;
125 const SkOpPtT* end1 = s1->fT < e1->fT ? e1 : s1;
126 const SkOpPtT* end2 = s2->fT < e2->fT ? e2 : s2;
127 *eOut = between(s1->fT, end2->fT, e1->fT) ? end2
128 : between(s2->fT, end1->fT, e2->fT) ? end1 : nullptr;
129 if (*sOut == *eOut) {
130 SkOPOBJASSERT(s1, start1->fT >= end2->fT || start2->fT >= end1->fT);
131 return false;
132 }
133 SkASSERT(!*sOut || *sOut != *eOut);
134 return *sOut && *eOut;
135 }
float e1
static bool between(SkScalar a, SkScalar b, SkScalar c)
#define SkOPOBJASSERT(obj, cond)

◆ prev()

SkOpPtT * SkOpPtT::prev ( )

Definition at line 134 of file SkOpSpan.cpp.

134 {
135 SkOpPtT* result = this;
136 SkOpPtT* next = this;
137 while ((next = next->fNext) != this) {
138 result = next;
139 }
140 SkASSERT(result->fNext == this);
141 return result;
142}
GAsyncResult * result

◆ ptAlreadySeen()

bool SkOpPtT::ptAlreadySeen ( const SkOpPtT head) const

Definition at line 124 of file SkOpSpan.cpp.

124 {
125 while (this != check) {
126 if (this->fPt == check->fPt) {
127 return true;
128 }
129 check = check->fNext;
130 }
131 return false;
132}

◆ segment() [1/2]

SkOpSegment * SkOpPtT::segment ( )

Definition at line 148 of file SkOpSpan.cpp.

148 {
149 return span()->segment();
150}
SkOpSegment * segment() const
Definition SkOpSpan.h:318

◆ segment() [2/2]

const SkOpSegment * SkOpPtT::segment ( ) const

Definition at line 144 of file SkOpSpan.cpp.

144 {
145 return span()->segment();
146}

◆ setCoincident()

void SkOpPtT::setCoincident ( ) const
inline

Definition at line 143 of file SkOpSpan.h.

143 {
145 fCoincident = true;
146 }

◆ setDeleted()

void SkOpPtT::setDeleted ( )

Definition at line 152 of file SkOpSpan.cpp.

152 {
153 SkASSERT(this->span()->debugDeleted() || this->span()->ptT() != this);
155 fDeleted = true;
156}

◆ setSpan()

void SkOpPtT::setSpan ( const SkOpSpanBase span)
inline

Definition at line 150 of file SkOpSpan.h.

150 {
151 fSpan = const_cast<SkOpSpanBase*>(span);
152 }

◆ span() [1/2]

SkOpSpanBase * SkOpPtT::span ( )
inline

Definition at line 158 of file SkOpSpan.h.

158 {
159 return fSpan;
160 }

◆ span() [2/2]

const SkOpSpanBase * SkOpPtT::span ( ) const
inline

Definition at line 154 of file SkOpSpan.h.

154 {
155 return fSpan;
156 }

◆ starter()

const SkOpPtT * SkOpPtT::starter ( const SkOpPtT end) const
inline

Definition at line 162 of file SkOpSpan.h.

162 {
163 return fT < end->fT ? this : end;
164 }

Member Data Documentation

◆ fCoincident

bool SkOpPtT::fCoincident
mutableprotected

Definition at line 174 of file SkOpSpan.h.

◆ fDeleted

bool SkOpPtT::fDeleted
protected

Definition at line 171 of file SkOpSpan.h.

◆ fDuplicatePt

bool SkOpPtT::fDuplicatePt
protected

Definition at line 172 of file SkOpSpan.h.

◆ fNext

SkOpPtT* SkOpPtT::fNext
protected

Definition at line 170 of file SkOpSpan.h.

◆ fPt

SkPoint SkOpPtT::fPt

Definition at line 167 of file SkOpSpan.h.

◆ fSpan

SkOpSpanBase* SkOpPtT::fSpan
protected

Definition at line 169 of file SkOpSpan.h.

◆ fT

double SkOpPtT::fT

Definition at line 166 of file SkOpSpan.h.


The documentation for this class was generated from the following files: