| Index: src/gpu/effects/GrOvalEffect.cpp
|
| diff --git a/src/gpu/effects/GrOvalEffect.cpp b/src/gpu/effects/GrOvalEffect.cpp
|
| index 97b977f7542b8a357e8700d2c406fa0cf37751e8..40870e27d2ff216ea30a852a5efa7e742fe4bdc5 100644
|
| --- a/src/gpu/effects/GrOvalEffect.cpp
|
| +++ b/src/gpu/effects/GrOvalEffect.cpp
|
| @@ -137,7 +137,8 @@ void GLCircleEffect::emitCode(GrGLShaderBuilder* builder,
|
| const TextureSamplerArray& samplers) {
|
| const CircleEffect& ce = drawEffect.castEffect<CircleEffect>();
|
| const char *circleName;
|
| - // The circle uniform is (center.x, center.y, radius + 0.5)
|
| + // The circle uniform is (center.x, center.y, radius + 0.5) for regular fills and
|
| + // (... ,radius - 0.5) for inverse fills.
|
| fCircleUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| kVec3f_GrSLType,
|
| "circle",
|
| @@ -171,7 +172,13 @@ GrGLEffect::EffectKey GLCircleEffect::GenKey(const GrDrawEffect& drawEffect,
|
| void GLCircleEffect::setData(const GrGLUniformManager& uman, const GrDrawEffect& drawEffect) {
|
| const CircleEffect& ce = drawEffect.castEffect<CircleEffect>();
|
| if (ce.getRadius() != fPrevRadius || ce.getCenter() != fPrevCenter) {
|
| - uman.set3f(fCircleUniform, ce.getCenter().fX, ce.getCenter().fY, ce.getRadius() + 0.5f);
|
| + SkScalar radius = ce.getRadius();
|
| + if (GrEffectEdgeTypeIsInverseFill(ce.getEdgeType())) {
|
| + radius -= 0.5f;
|
| + } else {
|
| + radius += 0.5f;
|
| + }
|
| + uman.set3f(fCircleUniform, ce.getCenter().fX, ce.getCenter().fY, radius);
|
| fPrevCenter = ce.getCenter();
|
| fPrevRadius = ce.getRadius();
|
| }
|
|
|