diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkColorSpaceXformSteps.cpp | 19 | ||||
-rw-r--r-- | src/core/SkColorSpaceXformSteps.h | 2 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/core/SkColorSpaceXformSteps.cpp b/src/core/SkColorSpaceXformSteps.cpp index c05bf6304e..08a59fc672 100644 --- a/src/core/SkColorSpaceXformSteps.cpp +++ b/src/core/SkColorSpaceXformSteps.cpp @@ -83,4 +83,23 @@ SkColorSpaceXformSteps::SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType sr // Step II) if dst has linear blending, encode back using dst transfer function before storing this->late_encode = !dstNL; + + // Fill out all the transfer functions we'll use: + SkColorSpaceTransferFn srcTF, dstTF; + SkAssertResult(src->isNumericalTransferFn(&srcTF)); + SkAssertResult(dst->isNumericalTransferFn(&dstTF)); + this->srcTFInv = srcTF.invert(); + this->dstTF = dstTF; + this->dstTFInv = dstTF.invert(); + + // If we linearize then immediately reencode with the same transfer function, skip both. + if ( this->linearize_src && + !this->late_unpremul && + !this->gamut_transform && + this->early_encode && + 0 == memcmp(&srcTF, &dstTF, sizeof(SkColorSpaceTransferFn))) + { + this->linearize_src = false; + this->early_encode = false; + } } diff --git a/src/core/SkColorSpaceXformSteps.h b/src/core/SkColorSpaceXformSteps.h index fe382403ea..090d88fe47 100644 --- a/src/core/SkColorSpaceXformSteps.h +++ b/src/core/SkColorSpaceXformSteps.h @@ -29,11 +29,9 @@ struct SkColorSpaceXformSteps { // Post-blend steps. bool late_encode; -/* TODO SkColorSpaceTransferFn srcTFInv, // Apply for linearize_src. dstTFInv, // Apply for linearize_dst. dstTF; // Apply for early_encode or late_encode. -*/ float src_to_dst_matrix[9]; // Apply this 3x3 row-major matrix for gamut_transform. }; |