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 "gl/builders/GrGLProgramBuilder.h" | 10 #include "gl/builders/GrGLProgramBuilder.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 /////////////////////////////////////////////////////////////////////////////// | 56 /////////////////////////////////////////////////////////////////////////////// |
57 | 57 |
58 /** | 58 /** |
59 * The output of this effect is a modulation of the input color and coverage for
a circle, | 59 * The output of this effect is a modulation of the input color and coverage for
a circle, |
60 * specified as offset_x, offset_y (both from center point), outer radius and in
ner radius. | 60 * specified as offset_x, offset_y (both from center point), outer radius and in
ner radius. |
61 */ | 61 */ |
62 | 62 |
63 class CircleEdgeEffect : public GrGeometryProcessor { | 63 class CircleEdgeEffect : public GrGeometryProcessor { |
64 public: | 64 public: |
65 static GrGeometryProcessor* Create(bool stroke) { | 65 static GrGeometryProcessor* Create(bool stroke) { |
66 GR_CREATE_STATIC_GEOMETRY_PROCESSOR(gCircleStrokeEdge, CircleEdgeEffect,
(true)); | 66 GR_CREATE_STATIC_PROCESSOR(gCircleStrokeEdge, CircleEdgeEffect, (true)); |
67 GR_CREATE_STATIC_GEOMETRY_PROCESSOR(gCircleFillEdge, CircleEdgeEffect, (
false)); | 67 GR_CREATE_STATIC_PROCESSOR(gCircleFillEdge, CircleEdgeEffect, (false)); |
68 | 68 |
69 if (stroke) { | 69 if (stroke) { |
70 gCircleStrokeEdge->ref(); | 70 gCircleStrokeEdge->ref(); |
71 return gCircleStrokeEdge; | 71 return gCircleStrokeEdge; |
72 } else { | 72 } else { |
73 gCircleFillEdge->ref(); | 73 gCircleFillEdge->ref(); |
74 return gCircleFillEdge; | 74 return gCircleFillEdge; |
75 } | 75 } |
76 } | 76 } |
77 | 77 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 * 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 |
173 * 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, |
174 * in both x and y directions. | 174 * in both x and y directions. |
175 * | 175 * |
176 * 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. |
177 */ | 177 */ |
178 | 178 |
179 class EllipseEdgeEffect : public GrGeometryProcessor { | 179 class EllipseEdgeEffect : public GrGeometryProcessor { |
180 public: | 180 public: |
181 static GrGeometryProcessor* Create(bool stroke) { | 181 static GrGeometryProcessor* Create(bool stroke) { |
182 GR_CREATE_STATIC_GEOMETRY_PROCESSOR(gEllipseStrokeEdge, EllipseEdgeEffec
t, (true)); | 182 GR_CREATE_STATIC_PROCESSOR(gEllipseStrokeEdge, EllipseEdgeEffect, (true)
); |
183 GR_CREATE_STATIC_GEOMETRY_PROCESSOR(gEllipseFillEdge, EllipseEdgeEffect,
(false)); | 183 GR_CREATE_STATIC_PROCESSOR(gEllipseFillEdge, EllipseEdgeEffect, (false))
; |
184 | 184 |
185 if (stroke) { | 185 if (stroke) { |
186 gEllipseStrokeEdge->ref(); | 186 gEllipseStrokeEdge->ref(); |
187 return gEllipseStrokeEdge; | 187 return gEllipseStrokeEdge; |
188 } else { | 188 } else { |
189 gEllipseFillEdge->ref(); | 189 gEllipseFillEdge->ref(); |
190 return gEllipseFillEdge; | 190 return gEllipseFillEdge; |
191 } | 191 } |
192 } | 192 } |
193 | 193 |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 * using differentials. | 316 * using differentials. |
317 * | 317 * |
318 * The result is device-independent and can be used with any affine matrix. | 318 * The result is device-independent and can be used with any affine matrix. |
319 */ | 319 */ |
320 | 320 |
321 class DIEllipseEdgeEffect : public GrGeometryProcessor { | 321 class DIEllipseEdgeEffect : public GrGeometryProcessor { |
322 public: | 322 public: |
323 enum Mode { kStroke = 0, kHairline, kFill }; | 323 enum Mode { kStroke = 0, kHairline, kFill }; |
324 | 324 |
325 static GrGeometryProcessor* Create(Mode mode) { | 325 static GrGeometryProcessor* Create(Mode mode) { |
326 GR_CREATE_STATIC_GEOMETRY_PROCESSOR(gEllipseStrokeEdge, DIEllipseEdgeEff
ect, (kStroke)); | 326 GR_CREATE_STATIC_PROCESSOR(gEllipseStrokeEdge, DIEllipseEdgeEffect, (kSt
roke)); |
327 GR_CREATE_STATIC_GEOMETRY_PROCESSOR(gEllipseHairlineEdge, DIEllipseEdgeE
ffect, (kHairline)); | 327 GR_CREATE_STATIC_PROCESSOR(gEllipseHairlineEdge, DIEllipseEdgeEffect, (k
Hairline)); |
328 GR_CREATE_STATIC_GEOMETRY_PROCESSOR(gEllipseFillEdge, DIEllipseEdgeEffec
t, (kFill)); | 328 GR_CREATE_STATIC_PROCESSOR(gEllipseFillEdge, DIEllipseEdgeEffect, (kFill
)); |
329 | 329 |
330 if (kStroke == mode) { | 330 if (kStroke == mode) { |
331 gEllipseStrokeEdge->ref(); | 331 gEllipseStrokeEdge->ref(); |
332 return gEllipseStrokeEdge; | 332 return gEllipseStrokeEdge; |
333 } else if (kHairline == mode) { | 333 } else if (kHairline == mode) { |
334 gEllipseHairlineEdge->ref(); | 334 gEllipseHairlineEdge->ref(); |
335 return gEllipseHairlineEdge; | 335 return gEllipseHairlineEdge; |
336 } else { | 336 } else { |
337 gEllipseFillEdge->ref(); | 337 gEllipseFillEdge->ref(); |
338 return gEllipseFillEdge; | 338 return gEllipseFillEdge; |
(...skipping 895 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1234 | 1234 |
1235 // drop out the middle quad if we're stroked | 1235 // drop out the middle quad if we're stroked |
1236 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : | 1236 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : |
1237 SK_ARRAY_COUNT(gRRectIndices); | 1237 SK_ARRAY_COUNT(gRRectIndices); |
1238 target->setIndexSourceToBuffer(indexBuffer); | 1238 target->setIndexSourceToBuffer(indexBuffer); |
1239 target->drawIndexed(kTriangles_GrPrimitiveType, 0, 0, 16, indexCnt, &bou
nds); | 1239 target->drawIndexed(kTriangles_GrPrimitiveType, 0, 0, 16, indexCnt, &bou
nds); |
1240 } | 1240 } |
1241 | 1241 |
1242 return true; | 1242 return true; |
1243 } | 1243 } |
OLD | NEW |