aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/SkColorSpaceXformSteps.cpp19
-rw-r--r--src/core/SkColorSpaceXformSteps.h2
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.
};