Add blend constant color and use it for lcd text common case (no fancy blend or shaded text)
Review URL: http://codereview.appspot.com/4274057/
git-svn-id: http://skia.googlecode.com/svn/trunk@941 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrTextContext.cpp b/gpu/src/GrTextContext.cpp
index 6819bde..2230af2 100644
--- a/gpu/src/GrTextContext.cpp
+++ b/gpu/src/GrTextContext.cpp
@@ -46,6 +46,25 @@
int nIndices = fCurrVertex + (fCurrVertex >> 1);
GrAssert(fCurrTexture);
fDrawTarget->setTexture(TEXT_STAGE, fCurrTexture);
+
+ if (!GrTexture::PixelConfigIsAlphaOnly(fCurrTexture->config())) {
+ if (kOne_BlendCoeff != fPaint.fSrcBlendCoeff ||
+ kISA_BlendCoeff != fPaint.fDstBlendCoeff ||
+ NULL != fPaint.getTexture()) {
+ GrPrintf("LCD Text will not draw correctly.\n");
+ }
+ // setup blend so that we get mask * paintColor + (1-mask)*dstColor
+ fDrawTarget->setBlendConstant(fPaint.fColor);
+ fDrawTarget->setBlendFunc(kConstC_BlendCoeff, kISC_BlendCoeff);
+ // don't modulate by the paint's color in the frag since we're
+ // already doing it via the blend const.
+ fDrawTarget->setColor(0xffffffff);
+ } else {
+ // set back to normal in case we took LCD path previously.
+ fDrawTarget->setBlendFunc(fPaint.fSrcBlendCoeff, fPaint.fDstBlendCoeff);
+ fDrawTarget->setColor(fPaint.fColor);
+ }
+
fDrawTarget->setIndexSourceToBuffer(fContext->getQuadIndexBuffer());
fDrawTarget->drawIndexed(kTriangles_PrimitiveType,