OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 #include "GrOvalRenderer.h" | 8 #include "GrOvalRenderer.h" |
9 | 9 |
10 #include "GrProcessor.h" | 10 #include "GrProcessor.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 /////////////////////////////////////////////////////////////////////////////// | 53 /////////////////////////////////////////////////////////////////////////////// |
54 | 54 |
55 /** | 55 /** |
56 * The output of this effect is a modulation of the input color and coverage for
a circle, | 56 * The output of this effect is a modulation of the input color and coverage for
a circle, |
57 * specified as offset_x, offset_y (both from center point), outer radius and in
ner radius. | 57 * specified as offset_x, offset_y (both from center point), outer radius and in
ner radius. |
58 */ | 58 */ |
59 | 59 |
60 class CircleEdgeEffect : public GrGeometryProcessor { | 60 class CircleEdgeEffect : public GrGeometryProcessor { |
61 public: | 61 public: |
62 static GrGeometryProcessor* Create(bool stroke) { | 62 static GrGeometryProcessor* Create(bool stroke) { |
63 GR_CREATE_STATIC_PROCESSOR(gCircleStrokeEdge, CircleEdgeEffect, (true)); | 63 return SkNEW_ARGS(CircleEdgeEffect, (stroke)); |
64 GR_CREATE_STATIC_PROCESSOR(gCircleFillEdge, CircleEdgeEffect, (false)); | |
65 | |
66 if (stroke) { | |
67 gCircleStrokeEdge->ref(); | |
68 return gCircleStrokeEdge; | |
69 } else { | |
70 gCircleFillEdge->ref(); | |
71 return gCircleFillEdge; | |
72 } | |
73 } | 64 } |
74 | 65 |
75 const GrAttribute* inPosition() const { return fInPosition; } | 66 const GrAttribute* inPosition() const { return fInPosition; } |
76 const GrAttribute* inCircleEdge() const { return fInCircleEdge; } | 67 const GrAttribute* inCircleEdge() const { return fInCircleEdge; } |
77 virtual ~CircleEdgeEffect() {} | 68 virtual ~CircleEdgeEffect() {} |
78 | 69 |
79 virtual const char* name() const SK_OVERRIDE { return "CircleEdge"; } | 70 virtual const char* name() const SK_OVERRIDE { return "CircleEdge"; } |
80 | 71 |
81 inline bool isStroked() const { return fStroke; } | 72 inline bool isStroked() const { return fStroke; } |
82 | 73 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 * The output of this effect is a modulation of the input color and coverage for
an axis-aligned | 172 * The output of this effect is a modulation of the input color and coverage for
an axis-aligned |
182 * ellipse, specified as a 2D offset from center, and the reciprocals of the out
er and inner radii, | 173 * ellipse, specified as a 2D offset from center, and the reciprocals of the out
er and inner radii, |
183 * in both x and y directions. | 174 * in both x and y directions. |
184 * | 175 * |
185 * We are using an implicit function of x^2/a^2 + y^2/b^2 - 1 = 0. | 176 * We are using an implicit function of x^2/a^2 + y^2/b^2 - 1 = 0. |
186 */ | 177 */ |
187 | 178 |
188 class EllipseEdgeEffect : public GrGeometryProcessor { | 179 class EllipseEdgeEffect : public GrGeometryProcessor { |
189 public: | 180 public: |
190 static GrGeometryProcessor* Create(bool stroke) { | 181 static GrGeometryProcessor* Create(bool stroke) { |
191 GR_CREATE_STATIC_PROCESSOR(gEllipseStrokeEdge, EllipseEdgeEffect, (true)
); | 182 return SkNEW_ARGS(EllipseEdgeEffect, (stroke)); |
192 GR_CREATE_STATIC_PROCESSOR(gEllipseFillEdge, EllipseEdgeEffect, (false))
; | |
193 | |
194 if (stroke) { | |
195 gEllipseStrokeEdge->ref(); | |
196 return gEllipseStrokeEdge; | |
197 } else { | |
198 gEllipseFillEdge->ref(); | |
199 return gEllipseFillEdge; | |
200 } | |
201 } | 183 } |
202 | 184 |
203 virtual ~EllipseEdgeEffect() {} | 185 virtual ~EllipseEdgeEffect() {} |
204 | 186 |
205 virtual const char* name() const SK_OVERRIDE { return "EllipseEdge"; } | 187 virtual const char* name() const SK_OVERRIDE { return "EllipseEdge"; } |
206 | 188 |
207 const GrAttribute* inPosition() const { return fInPosition; } | 189 const GrAttribute* inPosition() const { return fInPosition; } |
208 const GrAttribute* inEllipseOffset() const { return fInEllipseOffset; } | 190 const GrAttribute* inEllipseOffset() const { return fInEllipseOffset; } |
209 const GrAttribute* inEllipseRadii() const { return fInEllipseRadii; } | 191 const GrAttribute* inEllipseRadii() const { return fInEllipseRadii; } |
210 | 192 |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 * using differentials. | 322 * using differentials. |
341 * | 323 * |
342 * The result is device-independent and can be used with any affine matrix. | 324 * The result is device-independent and can be used with any affine matrix. |
343 */ | 325 */ |
344 | 326 |
345 class DIEllipseEdgeEffect : public GrGeometryProcessor { | 327 class DIEllipseEdgeEffect : public GrGeometryProcessor { |
346 public: | 328 public: |
347 enum Mode { kStroke = 0, kHairline, kFill }; | 329 enum Mode { kStroke = 0, kHairline, kFill }; |
348 | 330 |
349 static GrGeometryProcessor* Create(Mode mode) { | 331 static GrGeometryProcessor* Create(Mode mode) { |
350 GR_CREATE_STATIC_PROCESSOR(gEllipseStrokeEdge, DIEllipseEdgeEffect, (kSt
roke)); | 332 return SkNEW_ARGS(DIEllipseEdgeEffect, (mode)); |
351 GR_CREATE_STATIC_PROCESSOR(gEllipseHairlineEdge, DIEllipseEdgeEffect, (k
Hairline)); | |
352 GR_CREATE_STATIC_PROCESSOR(gEllipseFillEdge, DIEllipseEdgeEffect, (kFill
)); | |
353 | |
354 if (kStroke == mode) { | |
355 gEllipseStrokeEdge->ref(); | |
356 return gEllipseStrokeEdge; | |
357 } else if (kHairline == mode) { | |
358 gEllipseHairlineEdge->ref(); | |
359 return gEllipseHairlineEdge; | |
360 } else { | |
361 gEllipseFillEdge->ref(); | |
362 return gEllipseFillEdge; | |
363 } | |
364 } | 333 } |
365 | 334 |
366 virtual ~DIEllipseEdgeEffect() {} | 335 virtual ~DIEllipseEdgeEffect() {} |
367 | 336 |
368 virtual const char* name() const SK_OVERRIDE { return "DIEllipseEdge"; } | 337 virtual const char* name() const SK_OVERRIDE { return "DIEllipseEdge"; } |
369 | 338 |
370 const GrAttribute* inPosition() const { return fInPosition; } | 339 const GrAttribute* inPosition() const { return fInPosition; } |
371 const GrAttribute* inEllipseOffsets0() const { return fInEllipseOffsets0; } | 340 const GrAttribute* inEllipseOffsets0() const { return fInEllipseOffsets0; } |
372 const GrAttribute* inEllipseOffsets1() const { return fInEllipseOffsets1; } | 341 const GrAttribute* inEllipseOffsets1() const { return fInEllipseOffsets1; } |
373 | 342 |
(...skipping 896 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1270 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : | 1239 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : |
1271 SK_ARRAY_COUNT(gRRectIndices); | 1240 SK_ARRAY_COUNT(gRRectIndices); |
1272 target->setIndexSourceToBuffer(indexBuffer); | 1241 target->setIndexSourceToBuffer(indexBuffer); |
1273 target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 1
6, indexCnt, | 1242 target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 1
6, indexCnt, |
1274 &bounds); | 1243 &bounds); |
1275 } | 1244 } |
1276 | 1245 |
1277 target->resetIndexSource(); | 1246 target->resetIndexSource(); |
1278 return true; | 1247 return true; |
1279 } | 1248 } |
OLD | NEW |