Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(771)

Side by Side Diff: src/gpu/batches/GrAAConvexTessellator.h

Issue 2280943003: fixed 'corners' of paths in GrAAConvexTessellator (Closed)
Patch Set: oops Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/gpu/batches/GrAAConvexTessellator.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 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 7
8 #ifndef GrAAConvexTessellator_DEFINED 8 #ifndef GrAAConvexTessellator_DEFINED
9 #define GrAAConvexTessellator_DEFINED 9 #define GrAAConvexTessellator_DEFINED
10 10
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 struct PointData { 159 struct PointData {
160 SkPoint fNorm; 160 SkPoint fNorm;
161 SkPoint fBisector; 161 SkPoint fBisector;
162 int fIndex; 162 int fIndex;
163 int fOrigEdgeId; 163 int fOrigEdgeId;
164 }; 164 };
165 165
166 SkTDArray<PointData> fPts; 166 SkTDArray<PointData> fPts;
167 }; 167 };
168 168
169 // Represents whether a given point is within a curve. A point is inside a c urve only if it is
170 // an interior point within a quad, cubic, or conic, or if it is the endpoin t of a quad, cubic,
171 // or conic with another curve meeting it at (more or less) the same angle.
172 enum CurveState {
173 // point is a sharp vertex
174 kSharp_CurveState,
175 // endpoint of a curve with the other side's curvature not yet determine d
176 kIndeterminate_CurveState,
177 // point is in the interior of a curve
178 kCurve_CurveState
179 };
180
169 bool movable(int index) const { return fMovable[index]; } 181 bool movable(int index) const { return fMovable[index]; }
170 182
171 // Movable points are those that can be slid along their bisector. 183 // Movable points are those that can be slid along their bisector.
172 // Basically, a point is immovable if it is part of the original 184 // Basically, a point is immovable if it is part of the original
173 // polygon or it results from the fusing of two bisectors. 185 // polygon or it results from the fusing of two bisectors.
174 int addPt(const SkPoint& pt, SkScalar depth, SkScalar coverage, bool movable , bool isCurve); 186 int addPt(const SkPoint& pt, SkScalar depth, SkScalar coverage, bool movable , CurveState curve);
175 void popLastPt(); 187 void popLastPt();
176 void popFirstPtShuffle(); 188 void popFirstPtShuffle();
177 189
178 void updatePt(int index, const SkPoint& pt, SkScalar depth, SkScalar coverag e); 190 void updatePt(int index, const SkPoint& pt, SkScalar depth, SkScalar coverag e);
179 191
180 void addTri(int i0, int i1, int i2); 192 void addTri(int i0, int i1, int i2);
181 193
182 void reservePts(int count) { 194 void reservePts(int count) {
183 fPts.setReserve(count); 195 fPts.setReserve(count);
184 fCoverages.setReserve(count); 196 fCoverages.setReserve(count);
185 fMovable.setReserve(count); 197 fMovable.setReserve(count);
186 } 198 }
187 199
188 SkScalar computeDepthFromEdge(int edgeIdx, const SkPoint& p) const; 200 SkScalar computeDepthFromEdge(int edgeIdx, const SkPoint& p) const;
189 201
190 bool computePtAlongBisector(int startIdx, const SkPoint& bisector, 202 bool computePtAlongBisector(int startIdx, const SkPoint& bisector,
191 int edgeIdx, SkScalar desiredDepth, 203 int edgeIdx, SkScalar desiredDepth,
192 SkPoint* result) const; 204 SkPoint* result) const;
193 205
194 void lineTo(SkPoint p, bool isCurve); 206 void lineTo(SkPoint p, CurveState curve);
195 207
196 void lineTo(const SkMatrix& m, SkPoint p, bool isCurve); 208 void lineTo(const SkMatrix& m, SkPoint p, CurveState curve);
197 209
198 void quadTo(SkPoint pts[3]); 210 void quadTo(SkPoint pts[3]);
199 211
200 void quadTo(const SkMatrix& m, SkPoint pts[3]); 212 void quadTo(const SkMatrix& m, SkPoint pts[3]);
201 213
202 void cubicTo(const SkMatrix& m, SkPoint pts[4]); 214 void cubicTo(const SkMatrix& m, SkPoint pts[4]);
203 215
204 void conicTo(const SkMatrix& m, SkPoint pts[3], SkScalar w); 216 void conicTo(const SkMatrix& m, SkPoint pts[3], SkScalar w);
205 217
206 void terminate(const Ring& lastRing); 218 void terminate(const Ring& lastRing);
(...skipping 12 matching lines...) Expand all
219 bool createInsetRings(Ring& previousRing, SkScalar initialDepth, SkScalar in itialCoverage, 231 bool createInsetRings(Ring& previousRing, SkScalar initialDepth, SkScalar in itialCoverage,
220 SkScalar targetDepth, SkScalar targetCoverage, Ring** finalRing); 232 SkScalar targetDepth, SkScalar targetCoverage, Ring** finalRing);
221 233
222 bool createInsetRing(const Ring& lastRing, Ring* nextRing, 234 bool createInsetRing(const Ring& lastRing, Ring* nextRing,
223 SkScalar initialDepth, SkScalar initialCoverage, SkScal ar targetDepth, 235 SkScalar initialDepth, SkScalar initialCoverage, SkScal ar targetDepth,
224 SkScalar targetCoverage, bool forceNew); 236 SkScalar targetCoverage, bool forceNew);
225 237
226 void validate() const; 238 void validate() const;
227 239
228 // fPts, fCoverages & fMovable should always have the same # of elements 240 // fPts, fCoverages & fMovable should always have the same # of elements
229 SkTDArray<SkPoint> fPts; 241 SkTDArray<SkPoint> fPts;
230 SkTDArray<SkScalar> fCoverages; 242 SkTDArray<SkScalar> fCoverages;
231 // movable points are those that can be slid further along their bisector 243 // movable points are those that can be slid further along their bisector
232 SkTDArray<bool> fMovable; 244 SkTDArray<bool> fMovable;
233 245
234 // The outward facing normals for the original polygon 246 // The outward facing normals for the original polygon
235 SkTDArray<SkVector> fNorms; 247 SkTDArray<SkVector> fNorms;
236 // The inward facing bisector at each point in the original polygon. Only 248 // The inward facing bisector at each point in the original polygon. Only
237 // needed for exterior ring creation and then handed off to the initial ring . 249 // needed for exterior ring creation and then handed off to the initial ring .
238 SkTDArray<SkVector> fBisectors; 250 SkTDArray<SkVector> fBisectors;
239 251
240 // Tracks whether a given point is interior to a curve. Such points are 252 // Tracks whether a given point is interior to a curve. Such points are
241 // assumed to have shallow curvature. 253 // assumed to have shallow curvature.
242 SkTDArray<bool> fIsCurve; 254 SkTDArray<CurveState> fCurveState;
243 255
244 SkPoint::Side fSide; // winding of the original polygon 256 SkPoint::Side fSide; // winding of the original polygon
245 257
246 // The triangulation of the points 258 // The triangulation of the points
247 SkTDArray<int> fIndices; 259 SkTDArray<int> fIndices;
248 260
249 Ring fInitialRing; 261 Ring fInitialRing;
250 #if GR_AA_CONVEX_TESSELLATOR_VIZ 262 #if GR_AA_CONVEX_TESSELLATOR_VIZ
251 // When visualizing save all the rings 263 // When visualizing save all the rings
252 SkTDArray<Ring*> fRings; 264 SkTDArray<Ring*> fRings;
253 #else 265 #else
254 Ring fRings[2]; 266 Ring fRings[2];
255 #endif 267 #endif
256 CandidateVerts fCandidateVerts; 268 CandidateVerts fCandidateVerts;
257 269
258 // < 0 means filling rather than stroking 270 // < 0 means filling rather than stroking
259 SkScalar fStrokeWidth; 271 SkScalar fStrokeWidth;
260 272
261 SkPaint::Join fJoin; 273 SkPaint::Join fJoin;
262 274
263 SkScalar fMiterLimit; 275 SkScalar fMiterLimit;
264 276
265 SkTDArray<SkPoint> fPointBuffer; 277 SkTDArray<SkPoint> fPointBuffer;
266 }; 278 };
267 279
268 280
269 #endif 281 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/batches/GrAAConvexTessellator.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698