diff options
-rw-r--r-- | src/core/SkColorSpaceXformSteps.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/core/SkColorSpaceXformSteps.cpp b/src/core/SkColorSpaceXformSteps.cpp index d2f3881a1d..77a9c6b05d 100644 --- a/src/core/SkColorSpaceXformSteps.cpp +++ b/src/core/SkColorSpaceXformSteps.cpp @@ -107,6 +107,13 @@ void SkColorSpaceXformSteps::apply(SkRasterPipeline* p) const { if (flags.linearize) { if (srcTF_is_sRGB) { p->append(SkRasterPipeline::from_srgb); + } else if (srcTF.fA == 1 && + srcTF.fB == 0 && + srcTF.fC == 0 && + srcTF.fD == 0 && + srcTF.fE == 0 && + srcTF.fF == 0) { + p->append(SkRasterPipeline::gamma, &srcTF.fG); } else { p->append(SkRasterPipeline::parametric_r, &srcTF); p->append(SkRasterPipeline::parametric_g, &srcTF); @@ -119,6 +126,13 @@ void SkColorSpaceXformSteps::apply(SkRasterPipeline* p) const { if (flags.encode) { if (dstTF_is_sRGB) { p->append(SkRasterPipeline::to_srgb); + } else if (dstTFInv.fA == 1 && + dstTFInv.fB == 0 && + dstTFInv.fC == 0 && + dstTFInv.fD == 0 && + dstTFInv.fE == 0 && + dstTFInv.fF == 0) { + p->append(SkRasterPipeline::gamma, &dstTFInv.fG); } else { p->append(SkRasterPipeline::parametric_r, &dstTFInv); p->append(SkRasterPipeline::parametric_g, &dstTFInv); |