Cache the GrEffect used for text rendering in GrBitmapTextContext.
R=jvanverth@google.com
Author: bsalomon@google.com
Review URL: https://codereview.chromium.org/338093005
diff --git a/src/gpu/GrBitmapTextContext.cpp b/src/gpu/GrBitmapTextContext.cpp
index 4f6a1af..25c13ec 100755
--- a/src/gpu/GrBitmapTextContext.cpp
+++ b/src/gpu/GrBitmapTextContext.cpp
@@ -56,6 +56,7 @@
fCurrTexture = NULL;
fCurrVertex = 0;
+ fEffectTextureGenID = 0;
fVertices = NULL;
fMaxVertices = 0;
@@ -93,12 +94,17 @@
SkASSERT(fCurrTexture);
GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kNone_FilterMode);
+ uint32_t textureGenID = fCurrTexture->getGenerationID();
+
+ if (textureGenID != fEffectTextureGenID) {
+ fCachedEffect.reset(GrCustomCoordsTextureEffect::Create(fCurrTexture, params));
+ fEffectTextureGenID = textureGenID;
+ }
+
// This effect could be stored with one of the cache objects (atlas?)
int coordsIdx = drawState->hasColorVertexAttribute() ? kGlyphCoordsWithColorAttributeIndex :
kGlyphCoordsNoColorAttributeIndex;
- drawState->addCoverageEffect(
- GrCustomCoordsTextureEffect::Create(fCurrTexture, params),
- coordsIdx)->unref();
+ drawState->addCoverageEffect(fCachedEffect.get(), coordsIdx);
SkASSERT(NULL != fStrike);
switch (fStrike->getMaskFormat()) {
// Color bitmap text