diff options
author | brianosman <brianosman@google.com> | 2016-07-25 12:31:51 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-07-25 12:31:51 -0700 |
commit | 8fe485b793f6b3c286700988138e1395b0d33487 (patch) | |
tree | d133e684291ea67085f486c23a2e237a5cb8f6a1 /src/gpu/SkGr.cpp | |
parent | 20a272d024572efa50afb436c4770341abe9e1c1 (diff) |
Just pass the draw context to paint conversion
Concentrate on using draw context functionality to answer gamma and color
related queries in more places.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2182603003
Review-Url: https://codereview.chromium.org/2182603003
Diffstat (limited to 'src/gpu/SkGr.cpp')
-rw-r--r-- | src/gpu/SkGr.cpp | 56 |
1 files changed, 23 insertions, 33 deletions
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 51eb91021d..cf36b3a7cc 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -11,6 +11,7 @@ #include "GrCaps.h" #include "GrContext.h" +#include "GrDrawContext.h" #include "GrGpuResourcePriv.h" #include "GrImageIDTextureAdjuster.h" #include "GrTextureParamsAdjuster.h" @@ -515,22 +516,21 @@ static inline bool blend_requires_shader(const SkXfermode::Mode mode, bool primi } static inline bool skpaint_to_grpaint_impl(GrContext* context, + GrDrawContext* dc, const SkPaint& skPaint, const SkMatrix& viewM, sk_sp<GrFragmentProcessor>* shaderProcessor, SkXfermode::Mode* primColorMode, bool primitiveIsSrc, - bool allowSRGBInputs, - SkColorSpace* dstColorSpace, GrPaint* grPaint) { grPaint->setAntiAlias(skPaint.isAntiAlias()); - grPaint->setAllowSRGBInputs(allowSRGBInputs); + grPaint->setAllowSRGBInputs(dc->isGammaCorrect()); // Raw translation of the SkPaint color to our 4f format: GrColor4f origColor = GrColor4f::FromGrColor(SkColorToUnpremulGrColor(skPaint.getColor())); // Linearize, if the color is meant to be in sRGB gamma: - if (allowSRGBInputs) { + if (dc->isGammaCorrect()) { origColor.fRGBA[0] = exact_srgb_to_linear(origColor.fRGBA[0]); origColor.fRGBA[1] = exact_srgb_to_linear(origColor.fRGBA[1]); origColor.fRGBA[2] = exact_srgb_to_linear(origColor.fRGBA[2]); @@ -543,12 +543,10 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, if (shaderProcessor) { shaderFP = *shaderProcessor; } else if (const SkShader* shader = skPaint.getShader()) { - SkSourceGammaTreatment gammaTreatment = allowSRGBInputs - ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore; shaderFP = shader->asFragmentProcessor(SkShader::AsFPArgs(context, &viewM, nullptr, skPaint.getFilterQuality(), - dstColorSpace, - gammaTreatment)); + dc->getColorSpace(), + dc->sourceGammaTreatment())); if (!shaderFP) { return false; } @@ -653,79 +651,72 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, } #ifndef SK_IGNORE_GPU_DITHER - if (skPaint.isDither() && grPaint->numColorFragmentProcessors() > 0 && !allowSRGBInputs) { + if (skPaint.isDither() && grPaint->numColorFragmentProcessors() > 0 && !dc->isGammaCorrect()) { grPaint->addColorFragmentProcessor(GrDitherEffect::Make()); } #endif return true; } -bool SkPaintToGrPaint(GrContext* context, const SkPaint& skPaint, const SkMatrix& viewM, - bool allowSRGBInputs, SkColorSpace* dstColorSpace, GrPaint* grPaint) { - return skpaint_to_grpaint_impl(context, skPaint, viewM, nullptr, nullptr, false, - allowSRGBInputs, dstColorSpace, grPaint); +bool SkPaintToGrPaint(GrContext* context, GrDrawContext* dc, const SkPaint& skPaint, + const SkMatrix& viewM, GrPaint* grPaint) { + return skpaint_to_grpaint_impl(context, dc, skPaint, viewM, nullptr, nullptr, false, grPaint); } /** Replaces the SkShader (if any) on skPaint with the passed in GrFragmentProcessor. */ bool SkPaintToGrPaintReplaceShader(GrContext* context, + GrDrawContext* dc, const SkPaint& skPaint, sk_sp<GrFragmentProcessor> shaderFP, - bool allowSRGBInputs, - SkColorSpace* dstColorSpace, GrPaint* grPaint) { if (!shaderFP) { return false; } - return skpaint_to_grpaint_impl(context, skPaint, SkMatrix::I(), &shaderFP, nullptr, false, - allowSRGBInputs, dstColorSpace, grPaint); + return skpaint_to_grpaint_impl(context, dc, skPaint, SkMatrix::I(), &shaderFP, nullptr, false, + grPaint); } /** Ignores the SkShader (if any) on skPaint. */ bool SkPaintToGrPaintNoShader(GrContext* context, + GrDrawContext* dc, const SkPaint& skPaint, - bool allowSRGBInputs, - SkColorSpace* dstColorSpace, GrPaint* grPaint) { // Use a ptr to a nullptr to to indicate that the SkShader is ignored and not replaced. static sk_sp<GrFragmentProcessor> kNullShaderFP(nullptr); static sk_sp<GrFragmentProcessor>* kIgnoreShader = &kNullShaderFP; - return skpaint_to_grpaint_impl(context, skPaint, SkMatrix::I(), kIgnoreShader, nullptr, false, - allowSRGBInputs, dstColorSpace, grPaint); + return skpaint_to_grpaint_impl(context, dc, skPaint, SkMatrix::I(), kIgnoreShader, nullptr, + false, grPaint); } /** Blends the SkPaint's shader (or color if no shader) with a per-primitive color which must be setup as a vertex attribute using the specified SkXfermode::Mode. */ bool SkPaintToGrPaintWithXfermode(GrContext* context, + GrDrawContext* dc, const SkPaint& skPaint, const SkMatrix& viewM, SkXfermode::Mode primColorMode, bool primitiveIsSrc, - bool allowSRGBInputs, - SkColorSpace* dstColorSpace, GrPaint* grPaint) { - return skpaint_to_grpaint_impl(context, skPaint, viewM, nullptr, &primColorMode, primitiveIsSrc, - allowSRGBInputs, dstColorSpace, grPaint); + return skpaint_to_grpaint_impl(context, dc, skPaint, viewM, nullptr, &primColorMode, + primitiveIsSrc, grPaint); } bool SkPaintToGrPaintWithTexture(GrContext* context, + GrDrawContext* dc, const SkPaint& paint, const SkMatrix& viewM, sk_sp<GrFragmentProcessor> fp, bool textureIsAlphaOnly, - bool allowSRGBInputs, - SkColorSpace* dstColorSpace, GrPaint* grPaint) { sk_sp<GrFragmentProcessor> shaderFP; if (textureIsAlphaOnly) { if (const SkShader* shader = paint.getShader()) { - SkSourceGammaTreatment gammaTreatment = allowSRGBInputs - ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore; shaderFP = shader->asFragmentProcessor(SkShader::AsFPArgs(context, &viewM, nullptr, paint.getFilterQuality(), - dstColorSpace, - gammaTreatment)); + dc->getColorSpace(), + dc->sourceGammaTreatment())); if (!shaderFP) { return false; } @@ -738,8 +729,7 @@ bool SkPaintToGrPaintWithTexture(GrContext* context, shaderFP = GrFragmentProcessor::MulOutputByInputAlpha(fp); } - return SkPaintToGrPaintReplaceShader(context, paint, std::move(shaderFP), allowSRGBInputs, - dstColorSpace, grPaint); + return SkPaintToGrPaintReplaceShader(context, dc, paint, std::move(shaderFP), grPaint); } |