| Index: src/gpu/effects/GrRRectEffect.cpp
|
| diff --git a/src/gpu/effects/GrRRectEffect.cpp b/src/gpu/effects/GrRRectEffect.cpp
|
| index 7e58c1fe287a58b95e6c7084d2e18959687758a3..4c8e88636e050b7a5ced024889f9ae4522763246 100644
|
| --- a/src/gpu/effects/GrRRectEffect.cpp
|
| +++ b/src/gpu/effects/GrRRectEffect.cpp
|
| @@ -5,25 +5,22 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -#include "gl/builders/GrGLProgramBuilder.h"
|
| #include "GrRRectEffect.h"
|
|
|
| -#include "gl/GrGLProcessor.h"
|
| -#include "gl/GrGLSL.h"
|
| #include "GrConvexPolyEffect.h"
|
| +#include "GrFragmentProcessor.h"
|
| #include "GrInvariantOutput.h"
|
| #include "GrOvalEffect.h"
|
| -#include "GrTBackendProcessorFactory.h"
|
| -
|
| #include "SkRRect.h"
|
| +#include "gl/GrGLProcessor.h"
|
| +#include "gl/GrGLSL.h"
|
| +#include "gl/builders/GrGLProgramBuilder.h"
|
|
|
| // The effects defined here only handle rrect radii >= kRadiusMin.
|
| static const SkScalar kRadiusMin = SK_ScalarHalf;
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| -class GLCircularRRectEffect;
|
| -
|
| class CircularRRectEffect : public GrFragmentProcessor {
|
| public:
|
|
|
| @@ -50,7 +47,12 @@ public:
|
| const SkRRect&);
|
|
|
| virtual ~CircularRRectEffect() {};
|
| - static const char* Name() { return "CircularRRect"; }
|
| +
|
| + virtual const char* name() const SK_OVERRIDE { return "CircularRRect"; }
|
| +
|
| + virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
|
| +
|
| + virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
|
|
|
| const SkRRect& getRRect() const { return fRRect; }
|
|
|
| @@ -58,10 +60,6 @@ public:
|
|
|
| GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
|
|
|
| - typedef GLCircularRRectEffect GLProcessor;
|
| -
|
| - virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE;
|
| -
|
| private:
|
| CircularRRectEffect(GrPrimitiveEdgeType, uint32_t circularCornerFlags, const SkRRect&);
|
|
|
| @@ -91,15 +89,12 @@ void CircularRRectEffect::onComputeInvariantOutput(GrInvariantOutput* inout) con
|
| inout->mulByUnknownAlpha();
|
| }
|
|
|
| -const GrBackendFragmentProcessorFactory& CircularRRectEffect::getFactory() const {
|
| - return GrTBackendFragmentProcessorFactory<CircularRRectEffect>::getInstance();
|
| -}
|
| -
|
| CircularRRectEffect::CircularRRectEffect(GrPrimitiveEdgeType edgeType, uint32_t circularCornerFlags,
|
| const SkRRect& rrect)
|
| : fRRect(rrect)
|
| , fEdgeType(edgeType)
|
| , fCircularCornerFlags(circularCornerFlags) {
|
| + this->initClassID<CircularRRectEffect>();
|
| this->setWillReadFragmentPosition();
|
| }
|
|
|
| @@ -135,7 +130,7 @@ GrFragmentProcessor* CircularRRectEffect::TestCreate(SkRandom* random,
|
|
|
| class GLCircularRRectEffect : public GrGLFragmentProcessor {
|
| public:
|
| - GLCircularRRectEffect(const GrBackendProcessorFactory&, const GrProcessor&);
|
| + GLCircularRRectEffect(const GrProcessor&);
|
|
|
| virtual void emitCode(GrGLFPBuilder* builder,
|
| const GrFragmentProcessor& fp,
|
| @@ -155,9 +150,7 @@ private:
|
| typedef GrGLFragmentProcessor INHERITED;
|
| };
|
|
|
| -GLCircularRRectEffect::GLCircularRRectEffect(const GrBackendProcessorFactory& factory,
|
| - const GrProcessor& )
|
| - : INHERITED (factory) {
|
| +GLCircularRRectEffect::GLCircularRRectEffect(const GrProcessor& ) {
|
| fPrevRRect.setEmpty();
|
| }
|
|
|
| @@ -380,25 +373,34 @@ void GLCircularRRectEffect::setData(const GrGLProgramDataManager& pdman,
|
| }
|
| }
|
|
|
| -//////////////////////////////////////////////////////////////////////////////
|
| +////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
| -class GLEllipticalRRectEffect;
|
| +void CircularRRectEffect::getGLProcessorKey(const GrGLCaps& caps,
|
| + GrProcessorKeyBuilder* b) const {
|
| + GLCircularRRectEffect::GenKey(*this, caps, b);
|
| +}
|
| +
|
| +GrGLFragmentProcessor* CircularRRectEffect::createGLInstance() const {
|
| + return SkNEW_ARGS(GLCircularRRectEffect, (*this));
|
| +}
|
| +
|
| +//////////////////////////////////////////////////////////////////////////////
|
|
|
| class EllipticalRRectEffect : public GrFragmentProcessor {
|
| public:
|
| static GrFragmentProcessor* Create(GrPrimitiveEdgeType, const SkRRect&);
|
|
|
| virtual ~EllipticalRRectEffect() {};
|
| - static const char* Name() { return "EllipticalRRect"; }
|
|
|
| - const SkRRect& getRRect() const { return fRRect; }
|
| + virtual const char* name() const SK_OVERRIDE { return "EllipticalRRect"; }
|
|
|
| + virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVERRIDE;
|
|
|
| - GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
|
| + virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
|
|
|
| - typedef GLEllipticalRRectEffect GLProcessor;
|
| + const SkRRect& getRRect() const { return fRRect; }
|
|
|
| - virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE;
|
| + GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
|
|
|
| private:
|
| EllipticalRRectEffect(GrPrimitiveEdgeType, const SkRRect&);
|
| @@ -427,13 +429,10 @@ void EllipticalRRectEffect::onComputeInvariantOutput(GrInvariantOutput* inout) c
|
| inout->mulByUnknownAlpha();
|
| }
|
|
|
| -const GrBackendFragmentProcessorFactory& EllipticalRRectEffect::getFactory() const {
|
| - return GrTBackendFragmentProcessorFactory<EllipticalRRectEffect>::getInstance();
|
| -}
|
| -
|
| EllipticalRRectEffect::EllipticalRRectEffect(GrPrimitiveEdgeType edgeType, const SkRRect& rrect)
|
| : fRRect(rrect)
|
| - , fEdgeType(edgeType){
|
| + , fEdgeType(edgeType) {
|
| + this->initClassID<EllipticalRRectEffect>();
|
| this->setWillReadFragmentPosition();
|
| }
|
|
|
| @@ -488,7 +487,7 @@ GrFragmentProcessor* EllipticalRRectEffect::TestCreate(SkRandom* random,
|
|
|
| class GLEllipticalRRectEffect : public GrGLFragmentProcessor {
|
| public:
|
| - GLEllipticalRRectEffect(const GrBackendProcessorFactory&, const GrProcessor&);
|
| + GLEllipticalRRectEffect(const GrProcessor&);
|
|
|
| virtual void emitCode(GrGLFPBuilder* builder,
|
| const GrFragmentProcessor& effect,
|
| @@ -508,9 +507,7 @@ private:
|
| typedef GrGLFragmentProcessor INHERITED;
|
| };
|
|
|
| -GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrBackendProcessorFactory& factory,
|
| - const GrProcessor& effect)
|
| - : INHERITED (factory) {
|
| +GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrProcessor& effect) {
|
| fPrevRRect.setEmpty();
|
| }
|
|
|
| @@ -634,6 +631,17 @@ void GLEllipticalRRectEffect::setData(const GrGLProgramDataManager& pdman,
|
| }
|
| }
|
|
|
| +////////////////////////////////////////////////////////////////////////////////////////////////////
|
| +
|
| +void EllipticalRRectEffect::getGLProcessorKey(const GrGLCaps& caps,
|
| + GrProcessorKeyBuilder* b) const {
|
| + GLEllipticalRRectEffect::GenKey(*this, caps, b);
|
| +}
|
| +
|
| +GrGLFragmentProcessor* EllipticalRRectEffect::createGLInstance() const {
|
| + return SkNEW_ARGS(GLEllipticalRRectEffect, (*this));
|
| +}
|
| +
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| GrFragmentProcessor* GrRRectEffect::Create(GrPrimitiveEdgeType edgeType, const SkRRect& rrect) {
|
|
|