Remove all remaining GrColor4f (other than gradients)
This adds SkPMColor4f conversions to/from RGBA bytes (ie GrColor).
I had previously made some free functions that did the same thing.
I'm ambivalent about which option is nicer, but wanted to have one
method, so I converted everything to use the new versions.
Bug: skia:
Change-Id: I4194c44b5bd12228075fd1932a14cf31c8d6a3c1
Reviewed-on: https://skia-review.googlesource.com/c/162560
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index f78ef18..0406aa3 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -254,14 +254,6 @@
///////////////////////////////////////////////////////////////////////////////
-GrColor4f SkColor4fToUnpremulGrColor4f(SkColor4f c, const GrColorSpaceInfo& colorSpaceInfo) {
- GrColor4f color = GrColor4f::FromRGBA4f(c);
- if (auto* xform = colorSpaceInfo.colorSpaceXformFromSRGB()) {
- color = xform->apply(color);
- }
- return color;
-}
-
SkPMColor4f SkColorToPMColor4f(SkColor c, const GrColorSpaceInfo& colorSpaceInfo) {
SkColor4f color = SkColor4f::FromColor(c);
if (auto* xform = colorSpaceInfo.colorSpaceXformFromSRGB()) {
@@ -365,7 +357,10 @@
SkBlendMode* primColorMode,
GrPaint* grPaint) {
// Convert SkPaint color to 4f format in the destination color space
- GrColor4f origColor = SkColor4fToUnpremulGrColor4f(skPaint.getColor4f(), colorSpaceInfo);
+ SkColor4f origColor = skPaint.getColor4f();
+ if (auto* xform = colorSpaceInfo.colorSpaceXformFromSRGB()) {
+ origColor = xform->apply(origColor);
+ }
const GrFPArgs fpArgs(context, &viewM, skPaint.getFilterQuality(), &colorSpaceInfo);
@@ -396,7 +391,7 @@
// The geometry processor will insert the primitive color to start the color chain, so
// the GrPaint color will be ignored.
- SkPMColor4f shaderInput = origColor.opaque().asRGBA4f<kPremul_SkAlphaType>();
+ SkPMColor4f shaderInput = origColor.makeOpaque().premul();
shaderFP = GrFragmentProcessor::OverrideInput(std::move(shaderFP), shaderInput);
shaderFP = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(shaderFP),
*primColorMode);
@@ -412,28 +407,29 @@
// No gamut conversion - paintAlpha is a (linear) alpha value, splatted to all
// color channels. It's value should be treated as the same in ANY color space.
grPaint->addColorFragmentProcessor(GrConstColorProcessor::Make(
- GrColorToPMColor4f(paintAlpha),
+ SkPMColor4f::FromBytes_RGBA(paintAlpha),
GrConstColorProcessor::InputMode::kModulateRGBA));
}
} else {
- // The shader's FP sees the paint unpremul color
- grPaint->setColor4f(origColor);
+ // The shader's FP sees the paint *unpremul* color
+ SkPMColor4f origColorAsPM = { origColor.fR, origColor.fG, origColor.fB, origColor.fA };
+ grPaint->setColor4f(origColorAsPM);
grPaint->addColorFragmentProcessor(std::move(shaderFP));
}
} else {
if (primColorMode) {
// There is a blend between the primitive color and the paint color. The blend considers
// the opaque paint color. The paint's alpha is applied to the post-blended color.
- auto processor = GrConstColorProcessor::Make(
- origColor.opaque().asRGBA4f<kPremul_SkAlphaType>(),
- GrConstColorProcessor::InputMode::kIgnore);
+ SkPMColor4f opaqueColor = origColor.makeOpaque().premul();
+ auto processor = GrConstColorProcessor::Make(opaqueColor,
+ GrConstColorProcessor::InputMode::kIgnore);
processor = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(processor),
*primColorMode);
if (processor) {
grPaint->addColorFragmentProcessor(std::move(processor));
}
- grPaint->setColor4f(origColor.opaque());
+ grPaint->setColor4f(opaqueColor);
// We can ignore origColor here - alpha is unchanged by gamma
GrColor paintAlpha = GrColorPackA4(skPaint.getAlpha());
@@ -441,7 +437,7 @@
// No gamut conversion - paintAlpha is a (linear) alpha value, splatted to all
// color channels. It's value should be treated as the same in ANY color space.
grPaint->addColorFragmentProcessor(GrConstColorProcessor::Make(
- GrColorToPMColor4f(paintAlpha),
+ SkPMColor4f::FromBytes_RGBA(paintAlpha),
GrConstColorProcessor::InputMode::kModulateRGBA));
}
} else {
@@ -454,9 +450,8 @@
SkColorFilter* colorFilter = skPaint.getColorFilter();
if (colorFilter) {
if (applyColorFilterToPaintColor) {
- grPaint->setColor4f(GrColor4f::FromRGBA4f(
- colorFilter->filterColor4f(origColor.asRGBA4f<kUnpremul_SkAlphaType>(),
- colorSpaceInfo.colorSpace())).premul());
+ grPaint->setColor4f(
+ colorFilter->filterColor4f(origColor, colorSpaceInfo.colorSpace()).premul());
} else {
auto cfFP = colorFilter->asFragmentProcessor(context, colorSpaceInfo);
if (cfFP) {