| Index: src/gpu/GrDistanceFieldTextContext.cpp
|
| diff --git a/src/gpu/GrDistanceFieldTextContext.cpp b/src/gpu/GrDistanceFieldTextContext.cpp
|
| index a7299393bdaa729da726e916e97e86c29d43b2e0..2d2f9a14432dd7aae4a719e6469858f30bb8ef84 100755
|
| --- a/src/gpu/GrDistanceFieldTextContext.cpp
|
| +++ b/src/gpu/GrDistanceFieldTextContext.cpp
|
| @@ -7,12 +7,10 @@
|
|
|
| #include "GrDistanceFieldTextContext.h"
|
| #include "GrAtlas.h"
|
| -#include "SkColorFilter.h"
|
| #include "GrDrawTarget.h"
|
| #include "GrDrawTargetCaps.h"
|
| #include "GrFontScaler.h"
|
| #include "SkGlyphCache.h"
|
| -#include "GrGpu.h"
|
| #include "GrIndexBuffer.h"
|
| #include "GrTextStrike.h"
|
| #include "GrTextStrike_impl.h"
|
| @@ -45,7 +43,6 @@
|
| fEnableDFRendering = enable;
|
| #endif
|
| fStrike = NULL;
|
| - fGammaTexture = NULL;
|
|
|
| fCurrTexture = NULL;
|
| fCurrVertex = 0;
|
| @@ -56,7 +53,6 @@
|
|
|
| GrDistanceFieldTextContext::~GrDistanceFieldTextContext() {
|
| this->flushGlyphs();
|
| - SkSafeSetNull(fGammaTexture);
|
| }
|
|
|
| bool GrDistanceFieldTextContext::canDraw(const SkPaint& paint) {
|
| @@ -111,26 +107,14 @@
|
| SkASSERT(SkIsAlign4(fCurrVertex));
|
| SkASSERT(fCurrTexture);
|
| GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kBilerp_FilterMode);
|
| - GrTextureParams gammaParams(SkShader::kClamp_TileMode, GrTextureParams::kNone_FilterMode);
|
|
|
| // Effects could be stored with one of the cache objects (atlas?)
|
| - SkColor filteredColor;
|
| - SkColorFilter* colorFilter = fSkPaint.getColorFilter();
|
| - if (NULL != colorFilter) {
|
| - filteredColor = colorFilter->filterColor(fSkPaint.getColor());
|
| - } else {
|
| - filteredColor = fSkPaint.getColor();
|
| - }
|
| if (fUseLCDText) {
|
| - GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredColor);
|
| bool useBGR = SkDeviceProperties::Geometry::kBGR_Layout ==
|
| fDeviceProperties.fGeometry.getLayout();
|
| drawState->addCoverageEffect(GrDistanceFieldLCDTextureEffect::Create(
|
| fCurrTexture,
|
| params,
|
| - fGammaTexture,
|
| - gammaParams,
|
| - colorNoPreMul,
|
| fContext->getMatrix().rectStaysRect() &&
|
| fContext->getMatrix().isSimilarity(),
|
| useBGR),
|
| @@ -149,24 +133,13 @@
|
| // paintAlpha
|
| drawState->setColor(SkColorSetARGB(a, a, a, a));
|
| // paintColor
|
| - drawState->setBlendConstant(colorNoPreMul);
|
| + drawState->setBlendConstant(skcolor_to_grcolor_nopremultiply(fSkPaint.getColor()));
|
| drawState->setBlendFunc(kConstC_GrBlendCoeff, kISC_GrBlendCoeff);
|
| } else {
|
| -#ifdef SK_GAMMA_APPLY_TO_A8
|
| - U8CPU lum = SkColorSpaceLuminance::computeLuminance(fDeviceProperties.fGamma,
|
| - filteredColor);
|
| - drawState->addCoverageEffect(GrDistanceFieldTextureEffect::Create(
|
| - fCurrTexture, params,
|
| - fGammaTexture, gammaParams,
|
| - lum/255.f,
|
| + drawState->addCoverageEffect(GrDistanceFieldTextureEffect::Create(fCurrTexture, params,
|
| fContext->getMatrix().isSimilarity()),
|
| kGlyphCoordsAttributeIndex)->unref();
|
| -#else
|
| - drawState->addCoverageEffect(GrDistanceFieldTextureEffect::Create(
|
| - fCurrTexture, params,
|
| - fContext->getMatrix().isSimilarity()),
|
| - kGlyphCoordsAttributeIndex)->unref();
|
| -#endif
|
| +
|
| // set back to normal in case we took LCD path previously.
|
| drawState->setBlendFunc(fPaint.getSrcBlendCoeff(), fPaint.getDstBlendCoeff());
|
| drawState->setColor(fPaint.getColor());
|
| @@ -383,55 +356,13 @@
|
|
|
| fSkPaint.setLCDRenderText(false);
|
| fSkPaint.setAutohinted(false);
|
| - fSkPaint.setHinting(SkPaint::kNormal_Hinting);
|
| fSkPaint.setSubpixelText(true);
|
| -
|
| }
|
|
|
| inline void GrDistanceFieldTextContext::finish() {
|
| flushGlyphs();
|
|
|
| GrTextContext::finish();
|
| -}
|
| -
|
| -static void setup_gamma_texture(GrContext* context, const SkGlyphCache* cache,
|
| - const SkDeviceProperties& deviceProperties,
|
| - GrTexture** gammaTexture) {
|
| - if (NULL == *gammaTexture) {
|
| - int width, height;
|
| - size_t size;
|
| -
|
| -#ifdef SK_GAMMA_CONTRAST
|
| - SkScalar contrast = SK_GAMMA_CONTRAST;
|
| -#else
|
| - SkScalar contrast = 0.5f;
|
| -#endif
|
| - SkScalar paintGamma = deviceProperties.fGamma;
|
| - SkScalar deviceGamma = deviceProperties.fGamma;
|
| -
|
| - size = SkScalerContext::GetGammaLUTSize(contrast, paintGamma, deviceGamma,
|
| - &width, &height);
|
| -
|
| - SkAutoTArray<uint8_t> data((int)size);
|
| - SkScalerContext::GetGammaLUTData(contrast, paintGamma, deviceGamma, data.get());
|
| -
|
| - // TODO: Update this to use the cache rather than directly creating a texture.
|
| - GrTextureDesc desc;
|
| - desc.fFlags = kDynamicUpdate_GrTextureFlagBit;
|
| - desc.fWidth = width;
|
| - desc.fHeight = height;
|
| - desc.fConfig = kAlpha_8_GrPixelConfig;
|
| -
|
| - *gammaTexture = context->getGpu()->createTexture(desc, NULL, 0);
|
| - if (NULL == *gammaTexture) {
|
| - return;
|
| - }
|
| -
|
| - context->writeTexturePixels(*gammaTexture,
|
| - 0, 0, width, height,
|
| - (*gammaTexture)->config(), data.get(), 0,
|
| - GrContext::kDontFlush_PixelOpsFlag);
|
| - }
|
| }
|
|
|
| void GrDistanceFieldTextContext::drawText(const GrPaint& paint, const SkPaint& skPaint,
|
| @@ -451,11 +382,9 @@
|
|
|
| SkDrawCacheProc glyphCacheProc = fSkPaint.getDrawCacheProc();
|
|
|
| - SkAutoGlyphCacheNoGamma autoCache(fSkPaint, &fDeviceProperties, NULL);
|
| - SkGlyphCache* cache = autoCache.getCache();
|
| - GrFontScaler* fontScaler = GetGrFontScaler(cache);
|
| -
|
| - setup_gamma_texture(fContext, cache, fDeviceProperties, &fGammaTexture);
|
| + SkAutoGlyphCache autoCache(fSkPaint, &fDeviceProperties, NULL);
|
| + SkGlyphCache* cache = autoCache.getCache();
|
| + GrFontScaler* fontScaler = GetGrFontScaler(cache);
|
|
|
| // need to measure first
|
| // TODO - generate positions and pre-load cache as well?
|
| @@ -526,11 +455,9 @@
|
|
|
| SkDrawCacheProc glyphCacheProc = fSkPaint.getDrawCacheProc();
|
|
|
| - SkAutoGlyphCacheNoGamma autoCache(fSkPaint, &fDeviceProperties, NULL);
|
| - SkGlyphCache* cache = autoCache.getCache();
|
| - GrFontScaler* fontScaler = GetGrFontScaler(cache);
|
| -
|
| - setup_gamma_texture(fContext, cache, fDeviceProperties, &fGammaTexture);
|
| + SkAutoGlyphCache autoCache(fSkPaint, &fDeviceProperties, NULL);
|
| + SkGlyphCache* cache = autoCache.getCache();
|
| + GrFontScaler* fontScaler = GetGrFontScaler(cache);
|
|
|
| const char* stop = text + byteLength;
|
|
|
|
|