Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Unified Diff: src/gpu/SkGr.cpp

Issue 2339233003: Support Float32 output from SkColorSpaceXform (Closed)
Patch Set: Some fixes Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698