| Index: src/gpu/GrDistanceFieldTextContext.cpp
|
| diff --git a/src/gpu/GrDistanceFieldTextContext.cpp b/src/gpu/GrDistanceFieldTextContext.cpp
|
| index e5374f2a45abcb0742c0a2c8942ee643a21bce34..d8f10f1c846ab36db47e56188586d649b5e1743b 100755
|
| --- a/src/gpu/GrDistanceFieldTextContext.cpp
|
| +++ b/src/gpu/GrDistanceFieldTextContext.cpp
|
| @@ -405,7 +405,15 @@ void GrDistanceFieldTextContext::setupCoverageEffect(const SkColor& filteredColo
|
| flags != fEffectFlags) {
|
| if (fUseLCDText) {
|
| GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredColor);
|
| - fCachedGeometryProcessor.reset(GrDistanceFieldLCDTextureEffect::Create(fCurrTexture,
|
| +
|
| + // We don't use the GrPaint's color in this case because it's been premultiplied by
|
| + // alpha. Instead we feed in a non-premultiplied color, and multiply its alpha by
|
| + // the mask texture color. The end result is that we get
|
| + // mask*paintAlpha*paintColor + (1-mask*paintAlpha)*dstColor
|
| + int a = GrColorUnpackA(fSkPaint.getColor());
|
| + GrColor color = GrColorPackRGBA(a, a, a, a);
|
| + fCachedGeometryProcessor.reset(GrDistanceFieldLCDTextureEffect::Create(color,
|
| + fCurrTexture,
|
| params,
|
| fGammaTexture,
|
| gammaParams,
|
| @@ -413,18 +421,22 @@ void GrDistanceFieldTextContext::setupCoverageEffect(const SkColor& filteredColo
|
| flags));
|
| } else {
|
| flags |= kColorAttr_DistanceFieldEffectFlag;
|
| + GrColor color = fSkPaint.getColor();
|
| #ifdef SK_GAMMA_APPLY_TO_A8
|
| U8CPU lum = SkColorSpaceLuminance::computeLuminance(fDeviceProperties.gamma(),
|
| filteredColor);
|
| - fCachedGeometryProcessor.reset(GrDistanceFieldTextureEffect::Create(fCurrTexture,
|
| + fCachedGeometryProcessor.reset(GrDistanceFieldTextureEffect::Create(color,
|
| + fCurrTexture,
|
| params,
|
| fGammaTexture,
|
| gammaParams,
|
| lum/255.f,
|
| flags));
|
| #else
|
| - fCachedGeometryProcessor.reset(GrDistanceFieldNoGammaTextureEffect::Create(fCurrTexture,
|
| - params, flags));
|
| + fCachedGeometryProcessor.reset(GrDistanceFieldNoGammaTextureEffect::Create(color,
|
| + fCurrTexture,
|
| + params,
|
| + flags));
|
| #endif
|
| }
|
| fEffectTextureUniqueID = textureUniqueID;
|
| @@ -642,13 +654,6 @@ void GrDistanceFieldTextContext::flush() {
|
| SkDebugf("LCD Text will not draw correctly.\n");
|
| }
|
| SkASSERT(!drawState.hasColorVertexAttribute());
|
| - // We don't use the GrPaint's color in this case because it's been premultiplied by
|
| - // alpha. Instead we feed in a non-premultiplied color, and multiply its alpha by
|
| - // the mask texture color. The end result is that we get
|
| - // mask*paintAlpha*paintColor + (1-mask*paintAlpha)*dstColor
|
| - int a = SkColorGetA(fSkPaint.getColor());
|
| - // paintAlpha
|
| - drawState.setColor(SkColorSetARGB(a, a, a, a));
|
| // paintColor
|
| drawState.setBlendConstant(colorNoPreMul);
|
| drawState.setBlendFunc(kConstC_GrBlendCoeff, kISC_GrBlendCoeff);
|
|
|