From a1e8f8d8f1a0b7141136d7d49df1cc2fec0528df Mon Sep 17 00:00:00 2001 From: brianosman Date: Fri, 8 Apr 2016 06:47:54 -0700 Subject: Decouple contrast boost from fake gamma. Replace FakeGamma with FontWeightFlags. Largely mechanical, except for the changes in ignorePreBlend. With this change, text GMs generally look the same (or at least more similar) in 8888/srgb/gpu/gpusrgb configs. No public API changes. TBR=reed@google.com BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1866293003 Review URL: https://codereview.chromium.org/1866293003 --- src/gpu/text/GrAtlasTextContext.cpp | 74 ++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 37 deletions(-) (limited to 'src/gpu/text/GrAtlasTextContext.cpp') diff --git a/src/gpu/text/GrAtlasTextContext.cpp b/src/gpu/text/GrAtlasTextContext.cpp index 574993a3ca..6a1f7af4b3 100644 --- a/src/gpu/text/GrAtlasTextContext.cpp +++ b/src/gpu/text/GrAtlasTextContext.cpp @@ -53,14 +53,15 @@ GrColor GrAtlasTextContext::ComputeCanonicalColor(const SkPaint& paint, bool lcd return canonicalColor; } -SkPaint::FakeGamma GrAtlasTextContext::ComputeFakeGamma(GrDrawContext* dc, const GrPaint& grPaint) { +uint32_t GrAtlasTextContext::ComputeScalerContextFlags(GrDrawContext* dc, const GrPaint& grPaint) { // If we're rendering to an sRGB render target, and we aren't forcing sRGB blending off, - // then we can disable the gamma hacks. Otherwise, leave them on: + // then we can disable the gamma hacks. Otherwise, leave them on. In either case, we still + // want the contrast boost: if (GrPixelConfigIsSRGB(dc->accessRenderTarget()->config()) && !grPaint.getDisableOutputConversionToSRGB()) { - return SkPaint::FakeGamma::Off; + return SkPaint::kBoostContrast_ScalerContextFlag; } else { - return SkPaint::FakeGamma::On; + return SkPaint::kFakeGammaAndBoostContrast_ScalerContextFlags; } } @@ -127,7 +128,7 @@ void GrAtlasTextContext::drawTextBlob(GrContext* context, GrDrawContext* dc, return; } - SkPaint::FakeGamma fakeGamma = ComputeFakeGamma(dc, grPaint); + uint32_t scalerContextFlags = ComputeScalerContextFlags(dc, grPaint); if (cacheBlob) { if (cacheBlob->mustRegenerate(skPaint, grPaint.getColor(), blurRec, viewMatrix, x, y)) { @@ -138,7 +139,7 @@ void GrAtlasTextContext::drawTextBlob(GrContext* context, GrDrawContext* dc, cacheBlob.reset(SkRef(cache->createCachedBlob(blob, key, blurRec, skPaint))); RegenerateTextBlob(cacheBlob, context->getBatchFontCache(), *context->caps()->shaderCaps(), skPaint, grPaint.getColor(), - fakeGamma, viewMatrix, props, + scalerContextFlags, viewMatrix, props, blob, x, y, drawFilter); } else { cache->makeMRU(cacheBlob); @@ -151,7 +152,7 @@ void GrAtlasTextContext::drawTextBlob(GrContext* context, GrDrawContext* dc, sanityBlob->setupKey(key, blurRec, skPaint); RegenerateTextBlob(sanityBlob, context->getBatchFontCache(), *context->caps()->shaderCaps(), skPaint, - grPaint.getColor(), fakeGamma, viewMatrix, props, + grPaint.getColor(), scalerContextFlags, viewMatrix, props, blob, x, y, drawFilter); GrAtlasTextBlob::AssertEqual(*sanityBlob, *cacheBlob); } @@ -164,7 +165,7 @@ void GrAtlasTextContext::drawTextBlob(GrContext* context, GrDrawContext* dc, } RegenerateTextBlob(cacheBlob, context->getBatchFontCache(), *context->caps()->shaderCaps(), skPaint, grPaint.getColor(), - fakeGamma, viewMatrix, props, + scalerContextFlags, viewMatrix, props, blob, x, y, drawFilter); } @@ -176,7 +177,7 @@ void GrAtlasTextContext::RegenerateTextBlob(GrAtlasTextBlob* cacheBlob, GrBatchFontCache* fontCache, const GrShaderCaps& shaderCaps, const SkPaint& skPaint, GrColor color, - SkPaint::FakeGamma fakeGamma, + uint32_t scalerContextFlags, const SkMatrix& viewMatrix, const SkSurfaceProps& props, const SkTextBlob* blob, SkScalar x, SkScalar y, @@ -208,25 +209,25 @@ void GrAtlasTextContext::RegenerateTextBlob(GrAtlasTextBlob* cacheBlob, switch (it.positioning()) { case SkTextBlob::kDefault_Positioning: { GrTextUtils::DrawDFText(cacheBlob, run, fontCache, - props, runPaint, color, fakeGamma, viewMatrix, - (const char *)it.glyphs(), textLen, + props, runPaint, color, scalerContextFlags, + viewMatrix, (const char *)it.glyphs(), textLen, x + offset.x(), y + offset.y()); break; } case SkTextBlob::kHorizontal_Positioning: { SkPoint dfOffset = SkPoint::Make(x, y + offset.y()); GrTextUtils::DrawDFPosText(cacheBlob, run, fontCache, - props, runPaint, color, fakeGamma, viewMatrix, - (const char*)it.glyphs(), textLen, it.pos(), - 1, dfOffset); + props, runPaint, color, scalerContextFlags, + viewMatrix, (const char*)it.glyphs(), textLen, + it.pos(), 1, dfOffset); break; } case SkTextBlob::kFull_Positioning: { SkPoint dfOffset = SkPoint::Make(x, y); GrTextUtils::DrawDFPosText(cacheBlob, run, fontCache, - props, runPaint, color, fakeGamma, viewMatrix, - (const char*)it.glyphs(), textLen, it.pos(), - 2, dfOffset); + props, runPaint, color, scalerContextFlags, + viewMatrix, (const char*)it.glyphs(), textLen, + it.pos(), 2, dfOffset); break; } } @@ -236,21 +237,21 @@ void GrAtlasTextContext::RegenerateTextBlob(GrAtlasTextBlob* cacheBlob, switch (it.positioning()) { case SkTextBlob::kDefault_Positioning: GrTextUtils::DrawBmpText(cacheBlob, run, fontCache, - props, runPaint, color, fakeGamma, viewMatrix, - (const char *)it.glyphs(), textLen, + props, runPaint, color, scalerContextFlags, + viewMatrix, (const char *)it.glyphs(), textLen, x + offset.x(), y + offset.y()); break; case SkTextBlob::kHorizontal_Positioning: GrTextUtils::DrawBmpPosText(cacheBlob, run, fontCache, - props, runPaint, color, fakeGamma, viewMatrix, - (const char*)it.glyphs(), textLen, it.pos(), 1, - SkPoint::Make(x, y + offset.y())); + props, runPaint, color, scalerContextFlags, + viewMatrix, (const char*)it.glyphs(), textLen, + it.pos(), 1, SkPoint::Make(x, y + offset.y())); break; case SkTextBlob::kFull_Positioning: GrTextUtils::DrawBmpPosText(cacheBlob, run, fontCache, - props, runPaint, color, fakeGamma, viewMatrix, - (const char*)it.glyphs(), textLen, it.pos(), 2, - SkPoint::Make(x, y)); + props, runPaint, color, scalerContextFlags, + viewMatrix, (const char*)it.glyphs(), textLen, + it.pos(), 2, SkPoint::Make(x, y)); break; } } @@ -268,7 +269,7 @@ GrAtlasTextContext::CreateDrawTextBlob(GrTextBlobCache* blobCache, const GrShaderCaps& shaderCaps, const GrPaint& paint, const SkPaint& skPaint, - SkPaint::FakeGamma fakeGamma, + uint32_t scalerContextFlags, const SkMatrix& viewMatrix, const SkSurfaceProps& props, const char text[], size_t byteLength, @@ -279,12 +280,11 @@ GrAtlasTextContext::CreateDrawTextBlob(GrTextBlobCache* blobCache, blob->initThrowawayBlob(viewMatrix, x, y); if (GrTextUtils::CanDrawAsDistanceFields(skPaint, viewMatrix, props, shaderCaps)) { - GrTextUtils::DrawDFText(blob, 0, fontCache, props, - skPaint, paint.getColor(), fakeGamma, viewMatrix, text, - byteLength, x, y); + GrTextUtils::DrawDFText(blob, 0, fontCache, props, skPaint, paint.getColor(), + scalerContextFlags, viewMatrix, text, byteLength, x, y); } else { - GrTextUtils::DrawBmpText(blob, 0, fontCache, props, skPaint, - paint.getColor(), fakeGamma, viewMatrix, text, byteLength, x, y); + GrTextUtils::DrawBmpText(blob, 0, fontCache, props, skPaint, paint.getColor(), + scalerContextFlags, viewMatrix, text, byteLength, x, y); } return blob; } @@ -292,7 +292,7 @@ GrAtlasTextContext::CreateDrawTextBlob(GrTextBlobCache* blobCache, inline GrAtlasTextBlob* GrAtlasTextContext::CreateDrawPosTextBlob(GrTextBlobCache* blobCache, GrBatchFontCache* fontCache, const GrShaderCaps& shaderCaps, const GrPaint& paint, - const SkPaint& skPaint, SkPaint::FakeGamma fakeGamma, + const SkPaint& skPaint, uint32_t scalerContextFlags, const SkMatrix& viewMatrix, const SkSurfaceProps& props, const char text[], size_t byteLength, const SkScalar pos[], int scalarsPerPosition, @@ -304,11 +304,11 @@ GrAtlasTextContext::CreateDrawPosTextBlob(GrTextBlobCache* blobCache, GrBatchFon if (GrTextUtils::CanDrawAsDistanceFields(skPaint, viewMatrix, props, shaderCaps)) { GrTextUtils::DrawDFPosText(blob, 0, fontCache, props, - skPaint, paint.getColor(), fakeGamma, viewMatrix, text, + skPaint, paint.getColor(), scalerContextFlags, viewMatrix, text, byteLength, pos, scalarsPerPosition, offset); } else { GrTextUtils::DrawBmpPosText(blob, 0, fontCache, props, skPaint, - paint.getColor(), fakeGamma, viewMatrix, text, + paint.getColor(), scalerContextFlags, viewMatrix, text, byteLength, pos, scalarsPerPosition, offset); } return blob; @@ -329,7 +329,7 @@ void GrAtlasTextContext::drawText(GrContext* context, CreateDrawTextBlob(context->getTextBlobCache(), context->getBatchFontCache(), *context->caps()->shaderCaps(), paint, skPaint, - ComputeFakeGamma(dc, paint), + ComputeScalerContextFlags(dc, paint), viewMatrix, props, text, byteLength, x, y)); blob->flushThrowaway(context, dc, props, fDistanceAdjustTable, skPaint, paint, @@ -359,7 +359,7 @@ void GrAtlasTextContext::drawPosText(GrContext* context, context->getBatchFontCache(), *context->caps()->shaderCaps(), paint, skPaint, - ComputeFakeGamma(dc, paint), + ComputeScalerContextFlags(dc, paint), viewMatrix, props, text, byteLength, pos, scalarsPerPosition, @@ -423,7 +423,7 @@ DRAW_BATCH_TEST_DEFINE(TextBlobBatch) { GrAtlasTextContext::CreateDrawTextBlob(context->getTextBlobCache(), context->getBatchFontCache(), *context->caps()->shaderCaps(), grPaint, skPaint, - GrAtlasTextContext::kTextBlobBatchFakeGamma, + GrAtlasTextContext::kTextBlobBatchScalerContextFlags, viewMatrix, gSurfaceProps, text, static_cast(textLen), x, y)); -- cgit v1.2.3