Remove GrColorSpaceXform from GrGradientEffect
Use a local xform to convert color stops for analytic gradients.
For texture-based gradients, wrap the FP with an xform effect.
To simplify this code, add a new AdjustFP helper to do the color
xform, and also add the MulOutputByInputAlpha stage.
Bug: skia:
Change-Id: Icde19b5ec1c66aae76f894e9978c90a5f00c852e
Reviewed-on: https://skia-review.googlesource.com/62500
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/shaders/gradients/SkRadialGradient.cpp b/src/shaders/gradients/SkRadialGradient.cpp
index 5c31688..e704554 100644
--- a/src/shaders/gradients/SkRadialGradient.cpp
+++ b/src/shaders/gradients/SkRadialGradient.cpp
@@ -69,8 +69,9 @@
class GLSLRadialProcessor;
static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args) {
- auto processor = std::unique_ptr<GrRadialGradient>(new GrRadialGradient(args));
- return processor->isValid() ? std::move(processor) : nullptr;
+ return GrGradientEffect::AdjustFP(std::unique_ptr<GrRadialGradient>(
+ new GrRadialGradient(args)),
+ args);
}
const char* name() const override { return "Radial Gradient"; }
@@ -184,15 +185,9 @@
matrix.postConcat(inv);
}
matrix.postConcat(fPtsToUnit);
- sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(fColorSpace.get(),
- args.fDstColorSpace);
- auto inner = GrRadialGradient::Make(GrGradientEffect::CreateArgs(
- args.fContext, this, &matrix, fTileMode, std::move(colorSpaceXform),
- SkToBool(args.fDstColorSpace)));
- if (!inner) {
- return nullptr;
- }
- return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner));
+
+ return GrRadialGradient::Make(GrGradientEffect::CreateArgs(
+ args.fContext, this, &matrix, fTileMode, args.fDstColorSpace));
}
#endif