diff options
author | 2014-12-08 13:26:43 -0800 | |
---|---|---|
committer | 2014-12-08 13:26:43 -0800 | |
commit | 8d95ffa497091d0c9c7cda099684c7bca6714a17 (patch) | |
tree | b47fb9fba90f1c9c945db4c9d0fcd73802c8773e /src/gpu/GrBitmapTextContext.cpp | |
parent | 4ccf0b94054a4c16641c027edb4b0cfd0daddb65 (diff) |
Revert of Make all blending up to GrOptDrawState be handled by the xp/xp factory. (patchset #7 id:140001 of https://codereview.chromium.org/759713002/)
Reason for revert:
break many gm's
Original issue's description:
> Make all blending up to GrOptDrawState be handled by the xp/xp factory.
>
> In this cl the blending information is extracted for the xp and stored in the ODS
> which is then used as it currently is. In the follow up cl, an XP backend will be added
> and at that point all blending work will take place inside XP's.
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/7c66342a399b529634bed0fabfaa562db2c0dbd4
TBR=bsalomon@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review URL: https://codereview.chromium.org/766653008
Diffstat (limited to 'src/gpu/GrBitmapTextContext.cpp')
-rwxr-xr-x | src/gpu/GrBitmapTextContext.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gpu/GrBitmapTextContext.cpp b/src/gpu/GrBitmapTextContext.cpp index e509e02437..48054f4eac 100755 --- a/src/gpu/GrBitmapTextContext.cpp +++ b/src/gpu/GrBitmapTextContext.cpp @@ -561,6 +561,7 @@ void GrBitmapTextContext::flush() { // Color bitmap text case kARGB_GrMaskFormat: SkASSERT(!drawState.hasColorVertexAttribute()); + drawState.setBlendFunc(fPaint.getSrcBlendCoeff(), fPaint.getDstBlendCoeff()); drawState.setAlpha(fSkPaint.getAlpha()); break; // LCD text @@ -572,12 +573,24 @@ void GrBitmapTextContext::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(skcolor_to_grcolor_nopremultiply(fSkPaint.getColor())); + drawState.setBlendFunc(kConstC_GrBlendCoeff, kISC_GrBlendCoeff); break; } // Grayscale/BW text case kA8_GrMaskFormat: drawState.setHint(GrDrawState::kVertexColorsAreOpaque_Hint, 0xFF == GrColorUnpackA(fPaint.getColor())); + // set back to normal in case we took LCD path previously. + drawState.setBlendFunc(fPaint.getSrcBlendCoeff(), fPaint.getDstBlendCoeff()); // We're using per-vertex color. SkASSERT(drawState.hasColorVertexAttribute()); break; |