Refactor various gradient effect classes
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2221133002
Review-Url: https://codereview.chromium.org/2221133002
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp
index a3afe5a..78ecffa 100644
--- a/src/effects/gradients/SkRadialGradient.cpp
+++ b/src/effects/gradients/SkRadialGradient.cpp
@@ -242,28 +242,10 @@
#include "glsl/GrGLSLCaps.h"
#include "glsl/GrGLSLFragmentShaderBuilder.h"
-class GrGLRadialGradient : public GrGLGradientEffect {
-public:
-
- GrGLRadialGradient(const GrProcessor&) {}
- virtual ~GrGLRadialGradient() { }
-
- virtual void emitCode(EmitArgs&) override;
-
- static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
- b->add32(GenBaseGradientKey(processor));
- }
-
-private:
-
- typedef GrGLGradientEffect INHERITED;
-
-};
-
-/////////////////////////////////////////////////////////////////////
-
class GrRadialGradient : public GrGradientEffect {
public:
+ class GLSLRadialProcessor;
+
static sk_sp<GrFragmentProcessor> Make(GrContext* ctx,
const SkRadialGradient& shader,
const SkMatrix& matrix,
@@ -284,14 +266,10 @@
this->initClassID<GrRadialGradient>();
}
- GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
- return new GrGLRadialGradient(*this);
- }
+ GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps,
- GrProcessorKeyBuilder* b) const override {
- GrGLRadialGradient::GenKey(*this, caps, b);
- }
+ GrProcessorKeyBuilder* b) const override;
GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
@@ -300,6 +278,35 @@
/////////////////////////////////////////////////////////////////////
+class GrRadialGradient::GLSLRadialProcessor : public GrGradientEffect::GLSLProcessor {
+public:
+ GLSLRadialProcessor(const GrProcessor&) {}
+ virtual ~GLSLRadialProcessor() { }
+
+ virtual void emitCode(EmitArgs&) override;
+
+ static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
+ b->add32(GenBaseGradientKey(processor));
+ }
+
+private:
+ typedef GrGradientEffect::GLSLProcessor INHERITED;
+
+};
+
+/////////////////////////////////////////////////////////////////////
+
+GrGLSLFragmentProcessor* GrRadialGradient::onCreateGLSLInstance() const {
+ return new GrRadialGradient::GLSLRadialProcessor(*this);
+}
+
+void GrRadialGradient::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
+ GrProcessorKeyBuilder* b) const {
+ GrRadialGradient::GLSLRadialProcessor::GenKey(*this, caps, b);
+}
+
+/////////////////////////////////////////////////////////////////////
+
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRadialGradient);
sk_sp<GrFragmentProcessor> GrRadialGradient::TestCreate(GrProcessorTestData* d) {
@@ -322,7 +329,7 @@
/////////////////////////////////////////////////////////////////////
-void GrGLRadialGradient::emitCode(EmitArgs& args) {
+void GrRadialGradient::GLSLRadialProcessor::emitCode(EmitArgs& args) {
const GrRadialGradient& ge = args.fFp.cast<GrRadialGradient>();
this->emitUniforms(args.fUniformHandler, ge);
SkString t("length(");