Index: src/gpu/SkGr.cpp |
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp |
index c8839f3f1a49b0863df897e6f60de1a421ea0c54..86b1007ba52eab2bf057b75acd90d703995a71ce 100644 |
--- a/src/gpu/SkGr.cpp |
+++ b/src/gpu/SkGr.cpp |
@@ -23,6 +23,7 @@ |
#include "SkColorFilter.h" |
#include "SkConfig8888.h" |
#include "SkCanvas.h" |
+#include "SkColorSpaceXform.h" |
#include "SkData.h" |
#include "SkErrorInternals.h" |
#include "SkMessageBus.h" |
@@ -529,18 +530,20 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, |
grPaint->setAntiAlias(skPaint.isAntiAlias()); |
grPaint->setAllowSRGBInputs(dc->isGammaCorrect()); |
- // Raw translation of the SkPaint color to our 4f format: |
- GrColor4f origColor = GrColor4f::FromGrColor(SkColorToUnpremulGrColor(skPaint.getColor())); |
+ GrColor4f origColor; |
// Linearize, if the color is meant to be in sRGB gamma: |
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]); |
+ SkColorSpaceXform* xform = dc->getColorXformFromSRGB(); |
+ SkASSERT(xform); |
- if (dc->getColorXformFromSRGB()) { |
- origColor = dc->getColorXformFromSRGB()->apply(origColor); |
- } |
+ // FIXME (msarett): Support BGRA inputs to SkColorSpaceXform? |
+ uint32_t rgba = SkSwizzle_RB(skPaint.getColor()); |
+ xform->apply(&origColor, &rgba, 1, SkColorSpaceXform::kRGBA_F32_ColorFormat, |
+ kUnpremul_SkAlphaType); |
+ } else { |
+ // Raw translation of the SkPaint color to our 4f format: |
+ origColor = GrColor4f::FromGrColor(SkColorToUnpremulGrColor(skPaint.getColor())); |
} |
// Setup the initial color considering the shader, the SkPaint color, and the presence or not |