| Index: src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
|
| diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
|
| index 7bd2409b069e2bfac7c57654563c8cb3c41d450f..f1114fe61ae8620248bc0f0f5ba2ff074cb618bd 100644
|
| --- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
|
| +++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
|
| @@ -11,7 +11,6 @@
|
| #include "SkTwoPointConicalGradient.h"
|
|
|
| #if SK_SUPPORT_GPU
|
| -#include "GrTBackendProcessorFactory.h"
|
| #include "gl/builders/GrGLProgramBuilder.h"
|
| // For brevity
|
| typedef GrGLProgramDataManager::UniformHandle UniformHandle;
|
| @@ -55,8 +54,6 @@ static void set_matrix_edge_conical(const SkTwoPointConicalGradient& shader,
|
| }
|
| }
|
|
|
| -class GLEdge2PtConicalEffect;
|
| -
|
| class Edge2PtConicalEffect : public GrGradientEffect {
|
| public:
|
|
|
| @@ -69,16 +66,24 @@ public:
|
|
|
| virtual ~Edge2PtConicalEffect() {}
|
|
|
| - static const char* Name() { return "Two-Point Conical Gradient Edge Touching"; }
|
| - virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE;
|
| + virtual const char* name() const SK_OVERRIDE {
|
| + return "Two-Point Conical Gradient Edge Touching";
|
| + }
|
| +
|
| + virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
|
| +
|
| + virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
|
| +
|
| + virtual uint32_t classID() const {
|
| + static uint32_t id = GenClassID();
|
| + return id;
|
| + }
|
|
|
| // The radial gradient parameters can collapse to a linear (instead of quadratic) equation.
|
| SkScalar center() const { return fCenterX1; }
|
| SkScalar diffRadius() const { return fDiffRadius; }
|
| SkScalar radius() const { return fRadius0; }
|
|
|
| - typedef GLEdge2PtConicalEffect GLProcessor;
|
| -
|
| private:
|
| virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
|
| const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>();
|
| @@ -137,7 +142,7 @@ private:
|
|
|
| class GLEdge2PtConicalEffect : public GrGLGradientEffect {
|
| public:
|
| - GLEdge2PtConicalEffect(const GrBackendProcessorFactory& factory, const GrProcessor&);
|
| + GLEdge2PtConicalEffect(const GrProcessor&);
|
| virtual ~GLEdge2PtConicalEffect() { }
|
|
|
| virtual void emitCode(GrGLFPBuilder*,
|
| @@ -169,8 +174,13 @@ private:
|
|
|
| };
|
|
|
| -const GrBackendFragmentProcessorFactory& Edge2PtConicalEffect::getFactory() const {
|
| - return GrTBackendFragmentProcessorFactory<Edge2PtConicalEffect>::getInstance();
|
| +void Edge2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
|
| + GrProcessorKeyBuilder* b) const {
|
| + GLEdge2PtConicalEffect::GenKey(*this, caps, b);
|
| +}
|
| +
|
| +GrGLFragmentProcessor* Edge2PtConicalEffect::createGLInstance() const {
|
| + return SkNEW_ARGS(GLEdge2PtConicalEffect, (*this));
|
| }
|
|
|
| GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect);
|
| @@ -214,10 +224,8 @@ GrFragmentProcessor* Edge2PtConicalEffect::TestCreate(SkRandom* random,
|
| return fp;
|
| }
|
|
|
| -GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendProcessorFactory& factory,
|
| - const GrProcessor&)
|
| - : INHERITED(factory)
|
| - , fVSVaryingName(NULL)
|
| +GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&)
|
| + : fVSVaryingName(NULL)
|
| , fFSVaryingName(NULL)
|
| , fCachedRadius(-SK_ScalarMax)
|
| , fCachedDiffRadius(-SK_ScalarMax) {}
|
| @@ -228,7 +236,7 @@ void GLEdge2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
|
| const char* inputColor,
|
| const TransformedCoordsArray& coords,
|
| const TextureSamplerArray& samplers) {
|
| - const GrGradientEffect& ge = fp.cast<GrGradientEffect>();
|
| + const Edge2PtConicalEffect& ge = fp.cast<Edge2PtConicalEffect>();
|
| this->emitUniforms(builder, ge);
|
| fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibility,
|
| kFloat_GrSLType, "Conical2FSParams", 3);
|
| @@ -368,8 +376,6 @@ static ConicalType set_matrix_focal_conical(const SkTwoPointConicalGradient& sha
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| -class GLFocalOutside2PtConicalEffect;
|
| -
|
| class FocalOutside2PtConicalEffect : public GrGradientEffect {
|
| public:
|
|
|
| @@ -383,14 +389,22 @@ public:
|
|
|
| virtual ~FocalOutside2PtConicalEffect() { }
|
|
|
| - static const char* Name() { return "Two-Point Conical Gradient Focal Outside"; }
|
| - virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE;
|
| + virtual const char* name() const SK_OVERRIDE {
|
| + return "Two-Point Conical Gradient Focal Outside";
|
| + }
|
| +
|
| + virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
|
| +
|
| + virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
|
| +
|
| + virtual uint32_t classID() const {
|
| + static uint32_t id = GenClassID();
|
| + return id;
|
| + }
|
|
|
| bool isFlipped() const { return fIsFlipped; }
|
| SkScalar focal() const { return fFocalX; }
|
|
|
| - typedef GLFocalOutside2PtConicalEffect GLProcessor;
|
| -
|
| private:
|
| virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
|
| const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConicalEffect>();
|
| @@ -416,7 +430,7 @@ private:
|
|
|
| class GLFocalOutside2PtConicalEffect : public GrGLGradientEffect {
|
| public:
|
| - GLFocalOutside2PtConicalEffect(const GrBackendProcessorFactory& factory, const GrProcessor&);
|
| + GLFocalOutside2PtConicalEffect(const GrProcessor&);
|
| virtual ~GLFocalOutside2PtConicalEffect() { }
|
|
|
| virtual void emitCode(GrGLFPBuilder*,
|
| @@ -449,8 +463,13 @@ private:
|
|
|
| };
|
|
|
| -const GrBackendFragmentProcessorFactory& FocalOutside2PtConicalEffect::getFactory() const {
|
| - return GrTBackendFragmentProcessorFactory<FocalOutside2PtConicalEffect>::getInstance();
|
| +void FocalOutside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
|
| + GrProcessorKeyBuilder* b) const {
|
| + GLFocalOutside2PtConicalEffect::GenKey(*this, caps, b);
|
| +}
|
| +
|
| +GrGLFragmentProcessor* FocalOutside2PtConicalEffect::createGLInstance() const {
|
| + return SkNEW_ARGS(GLFocalOutside2PtConicalEffect, (*this));
|
| }
|
|
|
| GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect);
|
| @@ -491,10 +510,8 @@ GrFragmentProcessor* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random,
|
| return effect;
|
| }
|
|
|
| -GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrBackendProcessorFactory& factory,
|
| - const GrProcessor& processor)
|
| - : INHERITED(factory)
|
| - , fVSVaryingName(NULL)
|
| +GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrProcessor& processor)
|
| + : fVSVaryingName(NULL)
|
| , fFSVaryingName(NULL)
|
| , fCachedFocal(SK_ScalarMax) {
|
| const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtConicalEffect>();
|
| @@ -507,7 +524,7 @@ void GLFocalOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
|
| const char* inputColor,
|
| const TransformedCoordsArray& coords,
|
| const TextureSamplerArray& samplers) {
|
| - const GrGradientEffect& ge = fp.cast<GrGradientEffect>();
|
| + const FocalOutside2PtConicalEffect& ge = fp.cast<FocalOutside2PtConicalEffect>();
|
| this->emitUniforms(builder, ge);
|
| fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibility,
|
| kFloat_GrSLType, "Conical2FSParams", 2);
|
| @@ -593,8 +610,18 @@ public:
|
|
|
| virtual ~FocalInside2PtConicalEffect() {}
|
|
|
| - static const char* Name() { return "Two-Point Conical Gradient Focal Inside"; }
|
| - virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE;
|
| + virtual const char* name() const SK_OVERRIDE {
|
| + return "Two-Point Conical Gradient Focal Inside";
|
| + }
|
| +
|
| + virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
|
| +
|
| + virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
|
| +
|
| + virtual uint32_t classID() const {
|
| + static uint32_t id = GenClassID();
|
| + return id;
|
| + }
|
|
|
| SkScalar focal() const { return fFocalX; }
|
|
|
| @@ -623,7 +650,7 @@ private:
|
|
|
| class GLFocalInside2PtConicalEffect : public GrGLGradientEffect {
|
| public:
|
| - GLFocalInside2PtConicalEffect(const GrBackendProcessorFactory& factory, const GrProcessor&);
|
| + GLFocalInside2PtConicalEffect(const GrProcessor&);
|
| virtual ~GLFocalInside2PtConicalEffect() {}
|
|
|
| virtual void emitCode(GrGLFPBuilder*,
|
| @@ -654,8 +681,13 @@ private:
|
|
|
| };
|
|
|
| -const GrBackendFragmentProcessorFactory& FocalInside2PtConicalEffect::getFactory() const {
|
| - return GrTBackendFragmentProcessorFactory<FocalInside2PtConicalEffect>::getInstance();
|
| +void FocalInside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
|
| + GrProcessorKeyBuilder* b) const {
|
| + GLFocalInside2PtConicalEffect::GenKey(*this, caps, b);
|
| +}
|
| +
|
| +GrGLFragmentProcessor* FocalInside2PtConicalEffect::createGLInstance() const {
|
| + return SkNEW_ARGS(GLFocalInside2PtConicalEffect, (*this));
|
| }
|
|
|
| GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect);
|
| @@ -698,10 +730,8 @@ GrFragmentProcessor* FocalInside2PtConicalEffect::TestCreate(SkRandom* random,
|
| return fp;
|
| }
|
|
|
| -GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendProcessorFactory& factory,
|
| - const GrProcessor&)
|
| - : INHERITED(factory)
|
| - , fVSVaryingName(NULL)
|
| +GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&)
|
| + : fVSVaryingName(NULL)
|
| , fFSVaryingName(NULL)
|
| , fCachedFocal(SK_ScalarMax) {}
|
|
|
| @@ -711,7 +741,7 @@ void GLFocalInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
|
| const char* inputColor,
|
| const TransformedCoordsArray& coords,
|
| const TextureSamplerArray& samplers) {
|
| - const GrGradientEffect& ge = fp.cast<GrGradientEffect>();
|
| + const FocalInside2PtConicalEffect& ge = fp.cast<FocalInside2PtConicalEffect>();
|
| this->emitUniforms(builder, ge);
|
| fFocalUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| kFloat_GrSLType, "Conical2FSParams");
|
| @@ -814,8 +844,6 @@ static ConicalType set_matrix_circle_conical(const SkTwoPointConicalGradient& sh
|
| return kOutside_ConicalType;
|
| }
|
|
|
| -class GLCircleInside2PtConicalEffect;
|
| -
|
| class CircleInside2PtConicalEffect : public GrGradientEffect {
|
| public:
|
|
|
| @@ -829,8 +857,17 @@ public:
|
|
|
| virtual ~CircleInside2PtConicalEffect() {}
|
|
|
| - static const char* Name() { return "Two-Point Conical Gradient Inside"; }
|
| - virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE;
|
| + virtual const char* name() const SK_OVERRIDE { return "Two-Point Conical Gradient Inside"; }
|
| +
|
| + virtual void getGLProcessorKey(const GrGLCaps& caps,
|
| + GrProcessorKeyBuilder* b) const SK_OVERRIDE;
|
| +
|
| + virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
|
| +
|
| + virtual uint32_t classID() const {
|
| + static uint32_t id = GenClassID();
|
| + return id;
|
| + }
|
|
|
| SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
|
| SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
|
| @@ -838,8 +875,6 @@ public:
|
| SkScalar B() const { return fInfo.fB; }
|
| SkScalar C() const { return fInfo.fC; }
|
|
|
| - typedef GLCircleInside2PtConicalEffect GLProcessor;
|
| -
|
| private:
|
| virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
|
| const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConicalEffect>();
|
| @@ -866,7 +901,7 @@ private:
|
|
|
| class GLCircleInside2PtConicalEffect : public GrGLGradientEffect {
|
| public:
|
| - GLCircleInside2PtConicalEffect(const GrBackendProcessorFactory& factory, const GrProcessor&);
|
| + GLCircleInside2PtConicalEffect(const GrProcessor&);
|
| virtual ~GLCircleInside2PtConicalEffect() {}
|
|
|
| virtual void emitCode(GrGLFPBuilder*,
|
| @@ -902,8 +937,13 @@ private:
|
|
|
| };
|
|
|
| -const GrBackendFragmentProcessorFactory& CircleInside2PtConicalEffect::getFactory() const {
|
| - return GrTBackendFragmentProcessorFactory<CircleInside2PtConicalEffect>::getInstance();
|
| +void CircleInside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
|
| + GrProcessorKeyBuilder* b) const {
|
| + GLCircleInside2PtConicalEffect::GenKey(*this, caps, b);
|
| +}
|
| +
|
| +GrGLFragmentProcessor* CircleInside2PtConicalEffect::createGLInstance() const {
|
| + return SkNEW_ARGS(GLCircleInside2PtConicalEffect, (*this));
|
| }
|
|
|
| GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect);
|
| @@ -945,10 +985,8 @@ GrFragmentProcessor* CircleInside2PtConicalEffect::TestCreate(SkRandom* random,
|
| return processor;
|
| }
|
|
|
| -GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrBackendProcessorFactory& factory,
|
| - const GrProcessor& processor)
|
| - : INHERITED(factory)
|
| - , fVSVaryingName(NULL)
|
| +GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrProcessor& processor)
|
| + : fVSVaryingName(NULL)
|
| , fFSVaryingName(NULL)
|
| , fCachedCenterX(SK_ScalarMax)
|
| , fCachedCenterY(SK_ScalarMax)
|
| @@ -962,7 +1000,7 @@ void GLCircleInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
|
| const char* inputColor,
|
| const TransformedCoordsArray& coords,
|
| const TextureSamplerArray& samplers) {
|
| - const GrGradientEffect& ge = fp.cast<GrGradientEffect>();
|
| + const CircleInside2PtConicalEffect& ge = fp.cast<CircleInside2PtConicalEffect>();
|
| this->emitUniforms(builder, ge);
|
| fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| kVec2f_GrSLType, "Conical2FSCenter");
|
| @@ -1029,8 +1067,6 @@ void GLCircleInside2PtConicalEffect::GenKey(const GrProcessor& processor,
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| -class GLCircleOutside2PtConicalEffect;
|
| -
|
| class CircleOutside2PtConicalEffect : public GrGradientEffect {
|
| public:
|
|
|
| @@ -1044,8 +1080,16 @@ public:
|
|
|
| virtual ~CircleOutside2PtConicalEffect() {}
|
|
|
| - static const char* Name() { return "Two-Point Conical Gradient Outside"; }
|
| - virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE;
|
| + virtual const char* name() const SK_OVERRIDE { return "Two-Point Conical Gradient Outside"; }
|
| +
|
| + virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
|
| +
|
| + virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
|
| +
|
| + virtual uint32_t classID() const {
|
| + static uint32_t id = GenClassID();
|
| + return id;
|
| + }
|
|
|
| SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
|
| SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
|
| @@ -1055,8 +1099,6 @@ public:
|
| SkScalar tLimit() const { return fTLimit; }
|
| bool isFlipped() const { return fIsFlipped; }
|
|
|
| - typedef GLCircleOutside2PtConicalEffect GLProcessor;
|
| -
|
| private:
|
| virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
|
| const CircleOutside2PtConicalEffect& s = sBase.cast<CircleOutside2PtConicalEffect>();
|
| @@ -1096,7 +1138,7 @@ private:
|
|
|
| class GLCircleOutside2PtConicalEffect : public GrGLGradientEffect {
|
| public:
|
| - GLCircleOutside2PtConicalEffect(const GrBackendProcessorFactory&, const GrProcessor&);
|
| + GLCircleOutside2PtConicalEffect(const GrProcessor&);
|
| virtual ~GLCircleOutside2PtConicalEffect() {}
|
|
|
| virtual void emitCode(GrGLFPBuilder*,
|
| @@ -1135,8 +1177,13 @@ private:
|
|
|
| };
|
|
|
| -const GrBackendFragmentProcessorFactory& CircleOutside2PtConicalEffect::getFactory() const {
|
| - return GrTBackendFragmentProcessorFactory<CircleOutside2PtConicalEffect>::getInstance();
|
| +void CircleOutside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
|
| + GrProcessorKeyBuilder* b) const {
|
| + GLCircleOutside2PtConicalEffect::GenKey(*this, caps, b);
|
| +}
|
| +
|
| +GrGLFragmentProcessor* CircleOutside2PtConicalEffect::createGLInstance() const SK_OVERRIDE {
|
| + return SkNEW_ARGS(GLCircleOutside2PtConicalEffect, (*this));
|
| }
|
|
|
| GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect);
|
| @@ -1179,10 +1226,8 @@ GrFragmentProcessor* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random,
|
| return processor;
|
| }
|
|
|
| -GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrBackendProcessorFactory& factory,
|
| - const GrProcessor& processor)
|
| - : INHERITED(factory)
|
| - , fVSVaryingName(NULL)
|
| +GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrProcessor& processor)
|
| + : fVSVaryingName(NULL)
|
| , fFSVaryingName(NULL)
|
| , fCachedCenterX(SK_ScalarMax)
|
| , fCachedCenterY(SK_ScalarMax)
|
| @@ -1200,7 +1245,7 @@ void GLCircleOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
|
| const char* inputColor,
|
| const TransformedCoordsArray& coords,
|
| const TextureSamplerArray& samplers) {
|
| - const GrGradientEffect& ge = fp.cast<GrGradientEffect>();
|
| + const CircleOutside2PtConicalEffect& ge = fp.cast<CircleOutside2PtConicalEffect>();
|
| this->emitUniforms(builder, ge);
|
| fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| kVec2f_GrSLType, "Conical2FSCenter");
|
|
|