Index: src/gpu/GrBitmapTextContext.cpp |
diff --git a/src/gpu/GrBitmapTextContext.cpp b/src/gpu/GrBitmapTextContext.cpp |
index 9478d0436ceefc926672f8e6c7e62b50449118fe..7cfe91771f72e43ed97885ffc86ca45c0d7a6cc1 100755 |
--- a/src/gpu/GrBitmapTextContext.cpp |
+++ b/src/gpu/GrBitmapTextContext.cpp |
@@ -370,7 +370,7 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed, |
} |
// try to clear out an unused plot before we flush |
- if (fContext->getFontCache()->freeUnusedPlot(fStrike) && |
+ if (fContext->getFontCache()->freeUnusedPlot(fStrike, glyph) && |
fStrike->addGlyphToAtlas(glyph, scaler)) { |
goto HAS_ATLAS; |
} |
@@ -386,7 +386,7 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed, |
fContext->flush(); |
// we should have an unused plot now |
- if (fContext->getFontCache()->freeUnusedPlot(fStrike) && |
+ if (fContext->getFontCache()->freeUnusedPlot(fStrike, glyph) && |
fStrike->addGlyphToAtlas(glyph, scaler)) { |
goto HAS_ATLAS; |
} |
@@ -422,6 +422,7 @@ HAS_ATLAS: |
width = SkIntToFixed(width); |
height = SkIntToFixed(height); |
+ // the current texture/maskformat must match what the glyph needs |
GrTexture* texture = glyph->fPlot->texture(); |
SkASSERT(texture); |
@@ -429,9 +430,10 @@ HAS_ATLAS: |
this->flush(); |
fCurrTexture = texture; |
fCurrTexture->ref(); |
+ fCurrMaskFormat = glyph->fMaskFormat; |
} |
- bool useColorVerts = kA8_GrMaskFormat == fStrike->getMaskFormat(); |
+ bool useColorVerts = kA8_GrMaskFormat == fCurrMaskFormat; |
if (NULL == fVertices) { |
// If we need to reserve vertices allow the draw target to suggest |
@@ -549,12 +551,12 @@ void GrBitmapTextContext::flush() { |
// This effect could be stored with one of the cache objects (atlas?) |
drawState->setGeometryProcessor(fCachedGeometryProcessor.get()); |
SkASSERT(fStrike); |
- switch (fStrike->getMaskFormat()) { |
+ switch (fCurrMaskFormat) { |
// Color bitmap text |
case kARGB_GrMaskFormat: |
SkASSERT(!drawState->hasColorVertexAttribute()); |
drawState->setBlendFunc(fPaint.getSrcBlendCoeff(), fPaint.getDstBlendCoeff()); |
- drawState->setColor(0xffffffff); |
+ drawState->setAlpha(fSkPaint.getAlpha()); |
break; |
// LCD text |
case kA888_GrMaskFormat: |
@@ -585,7 +587,7 @@ void GrBitmapTextContext::flush() { |
SkASSERT(drawState->hasColorVertexAttribute()); |
break; |
default: |
- SkFAIL("Unexepected mask format."); |
+ SkFAIL("Unexpected mask format."); |
} |
int nGlyphs = fCurrVertex / 4; |
fDrawTarget->setIndexSourceToBuffer(fContext->getQuadIndexBuffer()); |