OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "GrAAHairLinePathRenderer.h" | 9 #include "GrAAHairLinePathRenderer.h" |
10 | 10 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 | 212 |
213 int totalQuadCount = 0; | 213 int totalQuadCount = 0; |
214 GrRect bounds; | 214 GrRect bounds; |
215 GrIRect ibounds; | 215 GrIRect ibounds; |
216 | 216 |
217 bool persp = m.hasPerspective(); | 217 bool persp = m.hasPerspective(); |
218 | 218 |
219 for (;;) { | 219 for (;;) { |
220 GrPoint pts[4]; | 220 GrPoint pts[4]; |
221 GrPoint devPts[4]; | 221 GrPoint devPts[4]; |
222 GrPathCmd cmd = (GrPathCmd)iter.next(pts); | 222 SkPath::Verb verb = iter.next(pts); |
223 switch (cmd) { | 223 switch (verb) { |
224 case kMove_PathCmd: | 224 case SkPath::kMove_Verb: |
225 break; | 225 break; |
226 case kLine_PathCmd: | 226 case SkPath::kLine_Verb: |
227 m.mapPoints(devPts, pts, 2); | 227 m.mapPoints(devPts, pts, 2); |
228 bounds.setBounds(devPts, 2); | 228 bounds.setBounds(devPts, 2); |
229 bounds.outset(SK_Scalar1, SK_Scalar1); | 229 bounds.outset(SK_Scalar1, SK_Scalar1); |
230 bounds.roundOut(&ibounds); | 230 bounds.roundOut(&ibounds); |
231 if (SkIRect::Intersects(devClipBounds, ibounds)) { | 231 if (SkIRect::Intersects(devClipBounds, ibounds)) { |
232 SkPoint* pts = lines->push_back_n(2); | 232 SkPoint* pts = lines->push_back_n(2); |
233 pts[0] = devPts[0]; | 233 pts[0] = devPts[0]; |
234 pts[1] = devPts[1]; | 234 pts[1] = devPts[1]; |
235 } | 235 } |
236 break; | 236 break; |
237 case kQuadratic_PathCmd: | 237 case SkPath::kQuad_Verb: |
238 m.mapPoints(devPts, pts, 3); | 238 m.mapPoints(devPts, pts, 3); |
239 bounds.setBounds(devPts, 3); | 239 bounds.setBounds(devPts, 3); |
240 bounds.outset(SK_Scalar1, SK_Scalar1); | 240 bounds.outset(SK_Scalar1, SK_Scalar1); |
241 bounds.roundOut(&ibounds); | 241 bounds.roundOut(&ibounds); |
242 if (SkIRect::Intersects(devClipBounds, ibounds)) { | 242 if (SkIRect::Intersects(devClipBounds, ibounds)) { |
243 int subdiv = num_quad_subdivs(devPts); | 243 int subdiv = num_quad_subdivs(devPts); |
244 GrAssert(subdiv >= -1); | 244 GrAssert(subdiv >= -1); |
245 if (-1 == subdiv) { | 245 if (-1 == subdiv) { |
246 SkPoint* pts = lines->push_back_n(4); | 246 SkPoint* pts = lines->push_back_n(4); |
247 pts[0] = devPts[0]; | 247 pts[0] = devPts[0]; |
248 pts[1] = devPts[1]; | 248 pts[1] = devPts[1]; |
249 pts[2] = devPts[1]; | 249 pts[2] = devPts[1]; |
250 pts[3] = devPts[2]; | 250 pts[3] = devPts[2]; |
251 } else { | 251 } else { |
252 // when in perspective keep quads in src space | 252 // when in perspective keep quads in src space |
253 SkPoint* qPts = persp ? pts : devPts; | 253 SkPoint* qPts = persp ? pts : devPts; |
254 SkPoint* pts = quads->push_back_n(3); | 254 SkPoint* pts = quads->push_back_n(3); |
255 pts[0] = qPts[0]; | 255 pts[0] = qPts[0]; |
256 pts[1] = qPts[1]; | 256 pts[1] = qPts[1]; |
257 pts[2] = qPts[2]; | 257 pts[2] = qPts[2]; |
258 quadSubdivCnts->push_back() = subdiv; | 258 quadSubdivCnts->push_back() = subdiv; |
259 totalQuadCount += 1 << subdiv; | 259 totalQuadCount += 1 << subdiv; |
260 } | 260 } |
261 } | 261 } |
262 break; | 262 break; |
263 case kCubic_PathCmd: | 263 case SkPath::kCubic_Verb: |
264 m.mapPoints(devPts, pts, 4); | 264 m.mapPoints(devPts, pts, 4); |
265 bounds.setBounds(devPts, 4); | 265 bounds.setBounds(devPts, 4); |
266 bounds.outset(SK_Scalar1, SK_Scalar1); | 266 bounds.outset(SK_Scalar1, SK_Scalar1); |
267 bounds.roundOut(&ibounds); | 267 bounds.roundOut(&ibounds); |
268 if (SkIRect::Intersects(devClipBounds, ibounds)) { | 268 if (SkIRect::Intersects(devClipBounds, ibounds)) { |
269 PREALLOC_PTARRAY(32) q; | 269 PREALLOC_PTARRAY(32) q; |
270 // we don't need a direction if we aren't constraining the s
ubdivision | 270 // we don't need a direction if we aren't constraining the s
ubdivision |
271 static const SkPath::Direction kDummyDir = SkPath::kCCW_Dire
ction; | 271 static const SkPath::Direction kDummyDir = SkPath::kCCW_Dire
ction; |
272 // We convert cubics to quadratics (for now). | 272 // We convert cubics to quadratics (for now). |
273 // In perspective have to do conversion in src space. | 273 // In perspective have to do conversion in src space. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 pts[0] = q[0 + i]; | 310 pts[0] = q[0 + i]; |
311 pts[1] = q[1 + i]; | 311 pts[1] = q[1 + i]; |
312 pts[2] = q[2 + i]; | 312 pts[2] = q[2 + i]; |
313 quadSubdivCnts->push_back() = subdiv; | 313 quadSubdivCnts->push_back() = subdiv; |
314 totalQuadCount += 1 << subdiv; | 314 totalQuadCount += 1 << subdiv; |
315 } | 315 } |
316 } | 316 } |
317 } | 317 } |
318 } | 318 } |
319 break; | 319 break; |
320 case kClose_PathCmd: | 320 case SkPath::kClose_Verb: |
321 break; | 321 break; |
322 case kEnd_PathCmd: | 322 case SkPath::kDone_Verb: |
323 return totalQuadCount; | 323 return totalQuadCount; |
324 } | 324 } |
325 } | 325 } |
326 } | 326 } |
327 | 327 |
328 struct Vertex { | 328 struct Vertex { |
329 GrPoint fPos; | 329 GrPoint fPos; |
330 union { | 330 union { |
331 struct { | 331 struct { |
332 SkScalar fA; | 332 SkScalar fA; |
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
839 4 * lineCnt + kVertsPerQuad*quads, // startV | 839 4 * lineCnt + kVertsPerQuad*quads, // startV |
840 0, // startI | 840 0, // startI |
841 kVertsPerQuad*n, // vCount | 841 kVertsPerQuad*n, // vCount |
842 kIdxsPerQuad*n); // iCount | 842 kIdxsPerQuad*n); // iCount |
843 quads += n; | 843 quads += n; |
844 } | 844 } |
845 target->resetIndexSource(); | 845 target->resetIndexSource(); |
846 | 846 |
847 return true; | 847 return true; |
848 } | 848 } |
OLD | NEW |