Index: src/gpu/SkGpuDevice.cpp |
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp |
index 5ba174cafcc53e9f483b7844c1f1d98b173629ac..a5d5be1903fabb15eec2b3ddd99a5ea0e5e104cf 100644 |
--- a/src/gpu/SkGpuDevice.cpp |
+++ b/src/gpu/SkGpuDevice.cpp |
@@ -200,6 +200,12 @@ void SkGpuDevice::initFromRenderTarget(GrContext* context, |
fContext = context; |
fContext->ref(); |
+#if SK_DISTANCEFIELD_FONTS |
+ fTextContextFactory = new GrTTextContextFactory<GrDistanceFieldTextContext>(); |
+#else |
+ fTextContextFactory = new GrTTextContextFactory<GrBitmapTextContext>(); |
+#endif |
+ |
fRenderTarget = NULL; |
fNeedClear = false; |
@@ -235,6 +241,12 @@ SkGpuDevice::SkGpuDevice(GrContext* context, |
fContext = context; |
fContext->ref(); |
+#if SK_DISTANCEFIELD_FONTS |
+ fTextContextFactory = new GrTTextContextFactory<GrDistanceFieldTextContext>(); |
+#else |
+ fTextContextFactory = new GrTTextContextFactory<GrBitmapTextContext>(); |
+#endif |
+ |
fRenderTarget = NULL; |
fNeedClear = false; |
@@ -279,6 +291,10 @@ SkGpuDevice::~SkGpuDevice() { |
if (fDrawProcs) { |
delete fDrawProcs; |
} |
+ |
+ if (fTextContextFactory) { |
+ delete fTextContextFactory; |
+ } |
// The GrContext takes a ref on the target. We don't want to cause the render |
// target to be unnecessarily kept alive. |
@@ -1820,13 +1836,15 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text, |
SkDEBUGCODE(this->validate();) |
- GrDistanceFieldTextContext context(fContext, grPaint, paint); |
+ GrDistanceFieldTextContext* context = |
+ (GrDistanceFieldTextContext*) fTextContextFactory->Create(fContext, grPaint, paint); |
- SkAutoGlyphCache autoCache(context.getSkPaint(), &this->fLeakyProperties, NULL); |
+ SkAutoGlyphCache autoCache(context->getSkPaint(), &this->fLeakyProperties, NULL); |
SkGlyphCache* cache = autoCache.getCache(); |
GrFontScaler* fontScaler = get_gr_font_scaler(cache); |
- context.drawText((const char *)text, byteLength, x, y, cache, fontScaler); |
+ context->drawText((const char *)text, byteLength, x, y, cache, fontScaler); |
+ fTextContextFactory->Destroy(context); |
#endif |
} else { |
SkDraw myDraw(draw); |
@@ -1836,9 +1854,10 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text, |
return; |
} |
- GrBitmapTextContext context(fContext, grPaint, paint.getColor()); |
- myDraw.fProcs = this->initDrawForText(&context); |
+ GrTextContext* context = fTextContextFactory->Create(fContext, grPaint, paint); |
+ myDraw.fProcs = this->initDrawForText(context); |
this->INHERITED::drawText(myDraw, text, byteLength, x, y, paint); |
+ fTextContextFactory->Destroy(context); |
} |
} |
@@ -1861,14 +1880,16 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, |
SkDEBUGCODE(this->validate();) |
- GrDistanceFieldTextContext context(fContext, grPaint, paint); |
+ GrDistanceFieldTextContext* context = |
+ (GrDistanceFieldTextContext*) fTextContextFactory->Create(fContext, grPaint, paint); |
bsalomon
2014/01/21 20:46:17
Does phase 2 remove the need for this downcast?
jvanverth1
2014/01/21 21:10:56
Yes. The current shared interface is for working w
|
- SkAutoGlyphCache autoCache(context.getSkPaint(), &this->fLeakyProperties, NULL); |
+ SkAutoGlyphCache autoCache(context->getSkPaint(), &this->fLeakyProperties, NULL); |
SkGlyphCache* cache = autoCache.getCache(); |
GrFontScaler* fontScaler = get_gr_font_scaler(cache); |
- context.drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos, |
+ context->drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos, |
cache, fontScaler); |
+ fTextContextFactory->Destroy(context); |
#endif |
} else { |
SkDraw myDraw(draw); |
@@ -1877,10 +1898,12 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, |
if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) { |
return; |
} |
- GrBitmapTextContext context(fContext, grPaint, paint.getColor()); |
- myDraw.fProcs = this->initDrawForText(&context); |
+ |
+ GrTextContext* context = fTextContextFactory->Create(fContext, grPaint, paint); |
+ myDraw.fProcs = this->initDrawForText(context); |
this->INHERITED::drawPosText(myDraw, text, byteLength, pos, constY, |
scalarsPerPos, paint); |
+ fTextContextFactory->Destroy(context); |
} |
} |