Index: src/gpu/batches/GrAtlasTextBatch.cpp |
diff --git a/src/gpu/batches/GrAtlasTextBatch.cpp b/src/gpu/batches/GrAtlasTextBatch.cpp |
index b1ec1f8ef5fada21903083d212ebe40f4c670a83..685cddcf0cb0ad268c9cb76e6d24c0deb71a0efc 100644 |
--- a/src/gpu/batches/GrAtlasTextBatch.cpp |
+++ b/src/gpu/batches/GrAtlasTextBatch.cpp |
@@ -312,12 +312,10 @@ void GrAtlasTextBatch::onPrepareDraws(Target* target) const { |
return; |
} |
- bool usesDistanceFields = this->usesDistanceFields(); |
GrMaskFormat maskFormat = this->maskFormat(); |
- bool isLCD = this->isLCD(); |
SkAutoTUnref<const GrGeometryProcessor> gp; |
- if (usesDistanceFields) { |
+ if (this->usesDistanceFields()) { |
gp.reset(this->setupDfProcessor(this->viewMatrix(), fFilteredColor, this->color(), |
texture)); |
} else { |
@@ -333,9 +331,7 @@ void GrAtlasTextBatch::onPrepareDraws(Target* target) const { |
FlushInfo flushInfo; |
flushInfo.fGlyphsToFlush = 0; |
size_t vertexStride = gp->getVertexStride(); |
- SkASSERT(vertexStride == (usesDistanceFields ? |
- GetVertexStrideDf(maskFormat, isLCD) : |
- GetVertexStride(maskFormat))); |
+ SkASSERT(vertexStride == GetVertexStride(maskFormat)); |
target->initDraw(gp, this->pipeline()); |
@@ -381,12 +377,8 @@ void GrAtlasTextBatch::onPrepareDraws(Target* target) const { |
bool regenerateGlyphs = info.strike()->isAbandoned(); |
bool regenerateTextureCoords = info.atlasGeneration() != currentAtlasGen || |
regenerateGlyphs; |
- bool regenerateColors; |
- if (usesDistanceFields) { |
- regenerateColors = !isLCD && run.fColor != args.fColor; |
- } else { |
- regenerateColors = kA8_GrMaskFormat == maskFormat && run.fColor != args.fColor; |
- } |
+ bool regenerateColors = kARGB_GrMaskFormat != maskFormat && |
+ run.fColor != args.fColor; |
bool regeneratePositions = args.fTransX != 0.f || args.fTransY != 0.f; |
int glyphCount = info.glyphCount(); |
@@ -459,9 +451,7 @@ bool GrAtlasTextBatch::onCombineIfPossible(GrBatch* t, const GrCaps& caps) { |
} |
if (!this->usesDistanceFields()) { |
- // TODO we can often batch across LCD text if we have dual source blending and don't |
- // have to use the blend constant |
- if (kGrayscaleCoverageMask_MaskType != fMaskType && this->color() != that->color()) { |
+ if (kColorBitmapMask_MaskType == fMaskType && this->color() != that->color()) { |
return false; |
} |
if (this->usesLocalCoords() && !this->viewMatrix().cheapEqualTo(that->viewMatrix())) { |
@@ -479,11 +469,6 @@ bool GrAtlasTextBatch::onCombineIfPossible(GrBatch* t, const GrCaps& caps) { |
if (fUseBGR != that->fUseBGR) { |
return false; |
} |
- |
- // TODO see note above |
- if (kLCDDistanceField_MaskType == fMaskType && this->color() != that->color()) { |
- return false; |
- } |
} |
fBatch.fNumGlyphs += that->numGlyphs(); |
@@ -530,6 +515,7 @@ GrGeometryProcessor* GrAtlasTextBatch::setupDfProcessor(const SkMatrix& viewMatr |
flags |= kUseLCD_DistanceFieldEffectFlag; |
flags |= viewMatrix.rectStaysRect() ? kRectToRect_DistanceFieldEffectFlag : 0; |
flags |= fUseBGR ? kBGR_DistanceFieldEffectFlag : 0; |
+ flags |= kColorAttr_DistanceFieldEffectFlag; |
GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredColor); |