diff options
author | 2013-03-20 17:47:16 +0000 | |
---|---|---|
committer | 2013-03-20 17:47:16 +0000 | |
commit | 67e7cde5c5e59a8f1de7ee28276b8193ecb2bc7f (patch) | |
tree | fbb2c63213570deb6062b3eb8e9ba1a13c0431d4 /src/effects/gradients | |
parent | 113994051b41366a7b25851d05cd56e89866a33b (diff) |
revert 8265-8264 (broke build)
git-svn-id: http://skia.googlecode.com/svn/trunk@8268 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/effects/gradients')
-rw-r--r-- | src/effects/gradients/SkGradientShader.cpp | 19 | ||||
-rw-r--r-- | src/effects/gradients/SkGradientShaderPriv.h | 7 | ||||
-rw-r--r-- | src/effects/gradients/SkLinearGradient.cpp | 14 | ||||
-rw-r--r-- | src/effects/gradients/SkRadialGradient.cpp | 14 | ||||
-rw-r--r-- | src/effects/gradients/SkSweepGradient.cpp | 14 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient.cpp | 33 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointRadialGradient.cpp | 32 |
7 files changed, 69 insertions, 64 deletions
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index d3b2fd41f8..1158dcf92a 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -734,14 +734,12 @@ SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END #if SK_SUPPORT_GPU #include "effects/GrTextureStripAtlas.h" -#include "GrTBackendEffectFactory.h" #include "SkGr.h" GrGLGradientEffect::GrGLGradientEffect(const GrBackendEffectFactory& factory) : INHERITED(factory) , fCachedYCoord(SK_ScalarMax) - , fFSYUni(GrGLUniformManager::kInvalidUniformHandle) - , fEffectMatrix(kCoordsType) { + , fFSYUni(GrGLUniformManager::kInvalidUniformHandle) { } GrGLGradientEffect::~GrGLGradientEffect() { } @@ -751,11 +749,10 @@ void GrGLGradientEffect::emitYCoordUniform(GrGLShaderBuilder* builder) { kFloat_GrSLType, "GradientYCoordFS"); } -void GrGLGradientEffect::setData(const GrGLUniformManager& uman, - const GrDrawEffect& drawEffect) { - const GrGradientEffect& e = drawEffect.castEffect<GrGradientEffect>(); +void GrGLGradientEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + const GrGradientEffect& e = GetEffectFromStage<GrGradientEffect>(stage); const GrTexture* texture = e.texture(0); - fEffectMatrix.setData(uman, e.getMatrix(), drawEffect, texture); + fEffectMatrix.setData(uman, e.getMatrix(), stage.getCoordChangeMatrix(), texture); SkScalar yCoord = e.getYCoord(); if (yCoord != fCachedYCoord) { @@ -764,19 +761,21 @@ void GrGLGradientEffect::setData(const GrGLUniformManager& uman, } } -GrGLEffect::EffectKey GrGLGradientEffect::GenMatrixKey(const GrDrawEffect& drawEffect) { - const GrGradientEffect& e = drawEffect.castEffect<GrGradientEffect>(); +GrGLEffect::EffectKey GrGLGradientEffect::GenMatrixKey(const GrEffectStage& s) { + const GrGradientEffect& e = GetEffectFromStage<GrGradientEffect>(s); const GrTexture* texture = e.texture(0); - return GrGLEffectMatrix::GenKey(e.getMatrix(), drawEffect, kCoordsType, texture); + return GrGLEffectMatrix::GenKey(e.getMatrix(), s.getCoordChangeMatrix(), texture); } void GrGLGradientEffect::setupMatrix(GrGLShaderBuilder* builder, EffectKey key, + const char* vertexCoords, const char** fsCoordName, const char** vsVaryingName, GrSLType* vsVaryingType) { fEffectMatrix.emitCodeMakeFSCoords2D(builder, key & kMatrixKeyMask, + vertexCoords, fsCoordName, vsVaryingName, vsVaryingType); diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h index b9dbf1b87b..271a2b6e51 100644 --- a/src/effects/gradients/SkGradientShaderPriv.h +++ b/src/effects/gradients/SkGradientShaderPriv.h @@ -274,7 +274,7 @@ public: GrGLGradientEffect(const GrBackendEffectFactory& factory); virtual ~GrGLGradientEffect(); - virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; protected: /** @@ -290,7 +290,7 @@ protected: * Subclasses must call this. It will return a value restricted to the lower kMatrixKeyBitCnt * bits. */ - static EffectKey GenMatrixKey(const GrDrawEffect&); + static EffectKey GenMatrixKey(const GrEffectStage& s); /** * Inserts code to implement the GrGradientEffect's matrix. This should be called before a @@ -302,6 +302,7 @@ protected: */ void setupMatrix(GrGLShaderBuilder* builder, EffectKey key, + const char* vertexCoords, const char** fsCoordName, const char** vsVaryingName = NULL, GrSLType* vsVaryingType = NULL); @@ -320,8 +321,6 @@ protected: const GrGLShaderBuilder::TextureSampler&); private: - static const GrEffect::CoordsType kCoordsType = GrEffect::kLocal_CoordsType; - SkScalar fCachedYCoord; GrGLUniformManager::UniformHandle fFSYUni; GrGLEffectMatrix fEffectMatrix; diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp index 76168a932d..3f8d7cccba 100644 --- a/src/effects/gradients/SkLinearGradient.cpp +++ b/src/effects/gradients/SkLinearGradient.cpp @@ -453,20 +453,21 @@ void SkLinearGradient::shadeSpan16(int x, int y, class GrGLLinearGradient : public GrGLGradientEffect { public: - GrGLLinearGradient(const GrBackendEffectFactory& factory, const GrDrawEffect&) + GrGLLinearGradient(const GrBackendEffectFactory& factory, const GrEffectRef&) : INHERITED (factory) { } virtual ~GrGLLinearGradient() { } virtual void emitCode(GrGLShaderBuilder*, - const GrDrawEffect&, + const GrEffectStage&, EffectKey, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - static EffectKey GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&) { - return GenMatrixKey(drawEffect); + static EffectKey GenKey(const GrEffectStage& stage, const GrGLCaps&) { + return GenMatrixKey(stage); } private: @@ -532,14 +533,15 @@ GrEffectRef* GrLinearGradient::TestCreate(SkMWCRandom* random, ///////////////////////////////////////////////////////////////////// void GrGLLinearGradient::emitCode(GrGLShaderBuilder* builder, - const GrDrawEffect&, + const GrEffectStage& stage, EffectKey key, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray& samplers) { this->emitYCoordUniform(builder); const char* coords; - this->setupMatrix(builder, key, &coords); + this->setupMatrix(builder, key, vertexCoords, &coords); SkString t; t.append(coords); t.append(".x"); diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index a80cb810af..3f670ad629 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -474,18 +474,19 @@ class GrGLRadialGradient : public GrGLGradientEffect { public: GrGLRadialGradient(const GrBackendEffectFactory& factory, - const GrDrawEffect&) : INHERITED (factory) { } + const GrEffectRef&) : INHERITED (factory) { } virtual ~GrGLRadialGradient() { } virtual void emitCode(GrGLShaderBuilder*, - const GrDrawEffect&, + const GrEffectStage&, EffectKey, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - static EffectKey GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&) { - return GenMatrixKey(drawEffect); + static EffectKey GenKey(const GrEffectStage& stage, const GrGLCaps&) { + return GenMatrixKey(stage); } private: @@ -553,14 +554,15 @@ GrEffectRef* GrRadialGradient::TestCreate(SkMWCRandom* random, ///////////////////////////////////////////////////////////////////// void GrGLRadialGradient::emitCode(GrGLShaderBuilder* builder, - const GrDrawEffect&, + const GrEffectStage&, EffectKey key, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray& samplers) { this->emitYCoordUniform(builder); const char* coords; - this->setupMatrix(builder, key, &coords); + this->setupMatrix(builder, key, vertexCoords, &coords); SkString t("length("); t.append(coords); t.append(")"); diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index 9d24d40106..44b03d6b87 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -391,18 +391,19 @@ class GrGLSweepGradient : public GrGLGradientEffect { public: GrGLSweepGradient(const GrBackendEffectFactory& factory, - const GrDrawEffect&) : INHERITED (factory) { } + const GrEffectRef&) : INHERITED (factory) { } virtual ~GrGLSweepGradient() { } virtual void emitCode(GrGLShaderBuilder*, - const GrDrawEffect&, + const GrEffectStage&, EffectKey, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - static EffectKey GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&) { - return GenMatrixKey(drawEffect); + static EffectKey GenKey(const GrEffectStage& stage, const GrGLCaps&) { + return GenMatrixKey(stage); } private: @@ -463,14 +464,15 @@ GrEffectRef* GrSweepGradient::TestCreate(SkMWCRandom* random, ///////////////////////////////////////////////////////////////////// void GrGLSweepGradient::emitCode(GrGLShaderBuilder* builder, - const GrDrawEffect&, + const GrEffectStage&, EffectKey key, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray& samplers) { this->emitYCoordUniform(builder); const char* coords; - this->setupMatrix(builder, key, &coords); + this->setupMatrix(builder, key, vertexCoords, &coords); SkString t; t.printf("atan(- %s.y, - %s.x) * 0.1591549430918 + 0.5", coords, coords); this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplers[0]); diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp index 0b6e30de39..04cf1ebfe5 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp @@ -343,18 +343,20 @@ static const UniformHandle kInvalidUniformHandle = GrGLUniformManager::kInvalidU class GrGLConical2Gradient : public GrGLGradientEffect { public: - GrGLConical2Gradient(const GrBackendEffectFactory& factory, const GrDrawEffect&); + GrGLConical2Gradient(const GrBackendEffectFactory& factory, + const GrEffectRef&); virtual ~GrGLConical2Gradient() { } virtual void emitCode(GrGLShaderBuilder*, - const GrDrawEffect&, + const GrEffectStage&, EffectKey, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; - static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps& caps); + static EffectKey GenKey(const GrEffectStage&, const GrGLCaps& caps); protected: @@ -474,7 +476,7 @@ GrEffectRef* GrConical2Gradient::TestCreate(SkMWCRandom* random, ///////////////////////////////////////////////////////////////////// GrGLConical2Gradient::GrGLConical2Gradient(const GrBackendEffectFactory& factory, - const GrDrawEffect& drawEffect) + const GrEffectRef& baseData) : INHERITED(factory) , fVSParamUni(kInvalidUniformHandle) , fFSParamUni(kInvalidUniformHandle) @@ -484,20 +486,21 @@ GrGLConical2Gradient::GrGLConical2Gradient(const GrBackendEffectFactory& factory , fCachedRadius(-SK_ScalarMax) , fCachedDiffRadius(-SK_ScalarMax) { - const GrConical2Gradient& data = drawEffect.castEffect<GrConical2Gradient>(); + const GrConical2Gradient& data = CastEffect<GrConical2Gradient>(baseData); fIsDegenerate = data.isDegenerate(); } void GrGLConical2Gradient::emitCode(GrGLShaderBuilder* builder, - const GrDrawEffect&, + const GrEffectStage&, EffectKey key, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray& samplers) { const char* fsCoords; const char* vsCoordsVarying; GrSLType coordsVaryingType; - this->setupMatrix(builder, key, &fsCoords, &vsCoordsVarying, &coordsVaryingType); + this->setupMatrix(builder, key, vertexCoords, &fsCoords, &vsCoordsVarying, &coordsVaryingType); this->emitYCoordUniform(builder); // 2 copies of uniform array, 1 for each of vertex & fragment shader, @@ -655,10 +658,9 @@ void GrGLConical2Gradient::emitCode(GrGLShaderBuilder* builder, } } -void GrGLConical2Gradient::setData(const GrGLUniformManager& uman, - const GrDrawEffect& drawEffect) { - INHERITED::setData(uman, drawEffect); - const GrConical2Gradient& data = drawEffect.castEffect<GrConical2Gradient>(); +void GrGLConical2Gradient::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + INHERITED::setData(uman, stage); + const GrConical2Gradient& data = GetEffectFromStage<GrConical2Gradient>(stage); GrAssert(data.isDegenerate() == fIsDegenerate); SkScalar centerX1 = data.center(); SkScalar radius0 = data.radius(); @@ -692,14 +694,13 @@ void GrGLConical2Gradient::setData(const GrGLUniformManager& uman, } } -GrGLEffect::EffectKey GrGLConical2Gradient::GenKey(const GrDrawEffect& drawEffect, - const GrGLCaps&) { +GrGLEffect::EffectKey GrGLConical2Gradient::GenKey(const GrEffectStage& s, const GrGLCaps&) { enum { kIsDegenerate = 1 << kMatrixKeyBitCnt, }; - EffectKey key = GenMatrixKey(drawEffect); - if (drawEffect.castEffect<GrConical2Gradient>().isDegenerate()) { + EffectKey key = GenMatrixKey(s); + if (GetEffectFromStage<GrConical2Gradient>(s).isDegenerate()) { key |= kIsDegenerate; } return key; diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp index 6784818761..0bf308bdb1 100644 --- a/src/effects/gradients/SkTwoPointRadialGradient.cpp +++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp @@ -384,18 +384,19 @@ class GrGLRadial2Gradient : public GrGLGradientEffect { public: - GrGLRadial2Gradient(const GrBackendEffectFactory& factory, const GrDrawEffect&); + GrGLRadial2Gradient(const GrBackendEffectFactory& factory, const GrEffectRef&); virtual ~GrGLRadial2Gradient() { } virtual void emitCode(GrGLShaderBuilder*, - const GrDrawEffect&, + const GrEffectStage&, EffectKey, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; - static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps& caps); + static EffectKey GenKey(const GrEffectStage&, const GrGLCaps& caps); protected: @@ -515,7 +516,7 @@ GrEffectRef* GrRadial2Gradient::TestCreate(SkMWCRandom* random, ///////////////////////////////////////////////////////////////////// GrGLRadial2Gradient::GrGLRadial2Gradient(const GrBackendEffectFactory& factory, - const GrDrawEffect& drawEffect) + const GrEffectRef& baseData) : INHERITED(factory) , fVSParamUni(kInvalidUniformHandle) , fFSParamUni(kInvalidUniformHandle) @@ -525,13 +526,14 @@ GrGLRadial2Gradient::GrGLRadial2Gradient(const GrBackendEffectFactory& factory, , fCachedRadius(-SK_ScalarMax) , fCachedPosRoot(0) { - const GrRadial2Gradient& data = drawEffect.castEffect<GrRadial2Gradient>(); + const GrRadial2Gradient& data = CastEffect<GrRadial2Gradient>(baseData); fIsDegenerate = data.isDegenerate(); } void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder, - const GrDrawEffect& drawEffect, + const GrEffectStage&, EffectKey key, + const char* vertexCoords, const char* outputColor, const char* inputColor, const TextureSamplerArray& samplers) { @@ -540,7 +542,7 @@ void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder, const char* fsCoords; const char* vsCoordsVarying; GrSLType coordsVaryingType; - this->setupMatrix(builder, key, &fsCoords, &vsCoordsVarying, &coordsVaryingType); + this->setupMatrix(builder, key, vertexCoords, &fsCoords, &vsCoordsVarying, &coordsVaryingType); // 2 copies of uniform array, 1 for each of vertex & fragment shader, // to work around Xoom bug. Doesn't seem to cause performance decrease @@ -637,10 +639,9 @@ void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder, } } -void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman, - const GrDrawEffect& drawEffect) { - INHERITED::setData(uman, drawEffect); - const GrRadial2Gradient& data = drawEffect.castEffect<GrRadial2Gradient>(); +void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + INHERITED::setData(uman, stage); + const GrRadial2Gradient& data = GetEffectFromStage<GrRadial2Gradient>(stage); GrAssert(data.isDegenerate() == fIsDegenerate); SkScalar centerX1 = data.center(); SkScalar radius0 = data.radius(); @@ -672,14 +673,13 @@ void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman, } } -GrGLEffect::EffectKey GrGLRadial2Gradient::GenKey(const GrDrawEffect& drawEffect, - const GrGLCaps&) { +GrGLEffect::EffectKey GrGLRadial2Gradient::GenKey(const GrEffectStage& s, const GrGLCaps&) { enum { kIsDegenerate = 1 << kMatrixKeyBitCnt, }; - EffectKey key = GenMatrixKey(drawEffect); - if (drawEffect.castEffect<GrRadial2Gradient>().isDegenerate()) { + EffectKey key = GenMatrixKey(s); + if (GetEffectFromStage<GrRadial2Gradient>(s).isDegenerate()) { key |= kIsDegenerate; } return key; |