41 , fMiterLimit(miterLimit) {
57#if GR_AA_CONVEX_TESSELLATOR_VIZ
67 class CandidateVerts {
69 void setReserve(
int numPts) {
fPts.reserve(numPts); }
70 void rewind() {
fPts.clear(); }
72 int numPts()
const {
return fPts.size(); }
74 const SkPoint& lastPoint()
const {
return fPts.back().fPt; }
75 const SkPoint& firstPoint()
const {
return fPts[0].fPt; }
78 int originatingIdx(
int index)
const {
return fPts[
index].fOriginatingIdx; }
80 bool needsToBeNew(
int index)
const {
return fPts[
index].fNeedsToBeNew; }
82 int addNewPt(
const SkPoint& newPt,
int originatingIdx,
int origEdge,
bool needsToBeNew) {
83 struct PointData* pt =
fPts.append();
85 pt->fOrigEdgeId = origEdge;
86 pt->fOriginatingIdx = originatingIdx;
87 pt->fNeedsToBeNew = needsToBeNew;
88 return fPts.size() - 1;
91 int fuseWithPrior(
int origEdgeId) {
92 fPts.back().fOrigEdgeId = origEdgeId;
93 fPts.back().fOriginatingIdx = -1;
94 fPts.back().fNeedsToBeNew =
true;
95 return fPts.size() - 1;
99 fPts[0].fOriginatingIdx = -1;
100 fPts[0].fNeedsToBeNew =
true;
105 if (
fPts.size() > 1) {
109 fPts[0].fOriginatingIdx = -1;
110 fPts[0].fNeedsToBeNew =
true;
129 void setReserve(
int numPts) {
fPts.reserve(numPts); }
130 void rewind() {
fPts.clear(); }
132 int numPts()
const {
return fPts.size(); }
134 void addIdx(
int index,
int origEdgeId) {
135 struct PointData* pt =
fPts.append();
137 pt->fOrigEdgeId = origEdgeId;
141 void makeOriginalRing() {
142 for (
int i = 0; i <
fPts.size(); ++i) {
143 fPts[i].fOrigEdgeId =
fPts[i].fIndex;
151 const SkPoint& norm(
int index)
const {
return fPts[index].fNorm; }
152 const SkPoint& bisector(
int index)
const {
return fPts[index].fBisector; }
153 int index(
int index)
const {
return fPts[index].fIndex; }
154 int origEdgeID(
int index)
const {
return fPts[index].fOrigEdgeId; }
155 void setOrigEdgeId(
int index,
int id) {
fPts[index].fOrigEdgeId =
id; }
157 #if GR_AA_CONVEX_TESSELLATOR_VIZ
184 kIndeterminate_CurveState,
189 bool movable(
int index)
const {
return fMovable[
index]; }
196 void popFirstPtShuffle();
200 void addTri(
int i0,
int i1,
int i2);
202 void reservePts(
int count) {
210 bool computePtAlongBisector(
int startIdx,
const SkPoint& bisector,
214 void lineTo(
const SkPoint& p, CurveState curve);
218 void quadTo(
const SkPoint pts[3]);
226 void terminate(
const Ring& lastRing);
230 void computeBisectors();
231 void computeNormals();
233 void fanRing(
const Ring& ring);
235 Ring* getNextRing(Ring* lastRing);
240 bool createInsetRings(Ring& previousRing,
SkScalar initialDepth,
SkScalar initialCoverage,
243 bool createInsetRing(
const Ring& lastRing, Ring* nextRing,
245 SkScalar targetCoverage,
bool forceNew);
247 void validate()
const;
270#if GR_AA_CONVEX_TESSELLATOR_VIZ
276 CandidateVerts fCandidateVerts;