diff options
Diffstat (limited to 'src/effects/gradients/SkSweepGradient.cpp')
-rw-r--r-- | src/effects/gradients/SkSweepGradient.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index 0ef957f3b4..7f504948fe 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -387,3 +387,58 @@ void SkSweepGradient::shadeSpan16(int x, int y, uint16_t* SK_RESTRICT dstC, } } +///////////////////////////////////////////////////////////////////// + +class GrGLSweepGradient : public GrGLGradientStage { + +public: + + GrGLSweepGradient(const GrProgramStageFactory& factory, + const GrCustomStage&) : INHERITED (factory) { } + virtual ~GrGLSweepGradient() { } + + virtual void emitVS(GrGLShaderBuilder* builder, + const char* vertexCoords) SK_OVERRIDE { } + virtual void emitFS(GrGLShaderBuilder* builder, + const char* outputColor, + const char* inputColor, + const char* samplerName) SK_OVERRIDE; + + static StageKey GenKey(const GrCustomStage& s) { return 0; } + +private: + + typedef GrGLGradientStage INHERITED; + +}; + +void GrGLSweepGradient::emitFS(GrGLShaderBuilder* builder, + const char* outputColor, + const char* inputColor, + const char* samplerName) { + SkString t; + t.printf("atan(- %s.y, - %s.x) * 0.1591549430918 + 0.5", + builder->fSampleCoords.c_str(), builder->fSampleCoords.c_str()); + this->emitColorLookup(builder, t.c_str(), outputColor, samplerName); +} + +///////////////////////////////////////////////////////////////////// + +GrSweepGradient::GrSweepGradient(GrTexture* texture) + : INHERITED(texture) { + +} + +GrSweepGradient::GrSweepGradient(GrContext* ctx, const SkShader& shader, + GrSamplerState* sampler) + : INHERITED(ctx, shader, sampler) { +} + +GrSweepGradient::~GrSweepGradient() { + +} + +const GrProgramStageFactory& GrSweepGradient::getFactory() const { + return GrTProgramStageFactory<GrSweepGradient>::getInstance(); +} + |