diff options
-rw-r--r-- | include/gpu/GrEffectStage.h | 14 | ||||
-rw-r--r-- | src/effects/SkColorMatrixFilter.cpp | 5 | ||||
-rw-r--r-- | src/effects/SkLightingImageFilter.cpp | 27 | ||||
-rw-r--r-- | src/effects/SkMagnifierImageFilter.cpp | 8 | ||||
-rw-r--r-- | src/effects/SkMatrixConvolutionImageFilter.cpp | 9 | ||||
-rw-r--r-- | src/effects/SkMorphologyImageFilter.cpp | 10 | ||||
-rw-r--r-- | src/effects/SkTableColorFilter.cpp | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkGradientShader.cpp | 4 | ||||
-rw-r--r-- | src/effects/gradients/SkGradientShaderPriv.h | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient.cpp | 9 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointRadialGradient.cpp | 9 | ||||
-rw-r--r-- | src/gpu/effects/GrConvolutionEffect.cpp | 9 | ||||
-rw-r--r-- | src/gpu/effects/GrTextureDomainEffect.cpp | 7 | ||||
-rw-r--r-- | src/gpu/gl/GrGLEffect.cpp | 4 | ||||
-rw-r--r-- | src/gpu/gl/GrGLEffect.h | 8 | ||||
-rw-r--r-- | src/gpu/gl/GrGLProgram.cpp | 2 |
16 files changed, 66 insertions, 63 deletions
diff --git a/include/gpu/GrEffectStage.h b/include/gpu/GrEffectStage.h index 6f8b23fea9..23b629a166 100644 --- a/include/gpu/GrEffectStage.h +++ b/include/gpu/GrEffectStage.h @@ -8,8 +8,8 @@ -#ifndef GrSamplerState_DEFINED -#define GrSamplerState_DEFINED +#ifndef GrEffectStage_DEFINED +#define GrEffectStage_DEFINED #include "GrEffect.h" #include "GrMatrix.h" @@ -79,7 +79,7 @@ public: * This gets the current coordinate system change. It is the accumulation of * preConcatCoordChange calls since the effect was installed. It is used when then caller * wants to temporarily change the source geometry coord system, draw something, and then - * restore the previous coord system (e.g. temporarily draw in device coords).s + * restore the previous coord system (e.g. temporarily draw in device coords). */ void saveCoordChange(SavedCoordChange* savedCoordChange) const { savedCoordChange->fCoordChangeMatrix = fCoordChangeMatrix; @@ -106,13 +106,19 @@ public: /** * Gets the matrix to apply at draw time. This is the original texture matrix combined with - * any coord system changes. + * any coord system changes. This will be removed when the matrix is managed by GrEffect. */ void getTotalMatrix(GrMatrix* matrix) const { *matrix = fMatrix; matrix->preConcat(fCoordChangeMatrix); } + /** + * Gets the matrix representing all changes of coordinate system since the GrEffect was + * installed in the stage. + */ + const GrMatrix& getCoordChangeMatrix() const { return fCoordChangeMatrix; } + void reset() { GrSafeSetNull(fEffect); } diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp index ca23452f93..22df6a6f5d 100644 --- a/src/effects/SkColorMatrixFilter.cpp +++ b/src/effects/SkColorMatrixFilter.cpp @@ -383,8 +383,9 @@ public: } virtual void setData(const GrGLUniformManager& uniManager, - const GrEffect& effect) SK_OVERRIDE { - const ColorMatrixEffect& cme = static_cast<const ColorMatrixEffect&>(effect); + const GrEffectStage& stage) SK_OVERRIDE { + const ColorMatrixEffect& cme = + static_cast<const ColorMatrixEffect&>(*stage.getEffect()); const float* m = cme.fMatrix.fMat; // The GL matrix is transposed from SkColorMatrix. GrGLfloat mt[] = { diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp index a83fe58250..803acaaa12 100644 --- a/src/effects/SkLightingImageFilter.cpp +++ b/src/effects/SkLightingImageFilter.cpp @@ -957,7 +957,7 @@ public: static inline EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps); - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; private: typedef GrGLLegacyEffect INHERITED; @@ -975,7 +975,7 @@ public: const GrEffect& effect); virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE; virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; private: typedef GrGLLightingEffect INHERITED; @@ -991,7 +991,7 @@ public: const GrEffect& effect); virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE; virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; private: typedef GrGLLightingEffect INHERITED; @@ -1173,10 +1173,9 @@ GrGLEffect::EffectKey GrGLLightingEffect::GenKey(const GrEffect& s, return static_cast<const GrLightingEffect&>(s).light()->type(); } -void GrGLLightingEffect::setData(const GrGLUniformManager& uman, const GrEffect& data) { - const GrLightingEffect& effect = - static_cast<const GrLightingEffect&>(data); - GrGLTexture* texture = static_cast<GrGLTexture*>(data.texture(0)); +void GrGLLightingEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + const GrLightingEffect& effect =static_cast<const GrLightingEffect&>(*stage.getEffect()); + GrGLTexture* texture = static_cast<GrGLTexture*>(effect.texture(0)); float ySign = texture->orientation() == GrGLTexture::kTopDown_Orientation ? -1.0f : 1.0f; uman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->height()); uman.set1f(fSurfaceScaleUni, effect.surfaceScale()); @@ -1217,10 +1216,11 @@ void GrGLDiffuseLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkStri funcName); } -void GrGLDiffuseLightingEffect::setData(const GrGLUniformManager& uman, const GrEffect& data) { - INHERITED::setData(uman, data); +void GrGLDiffuseLightingEffect::setData(const GrGLUniformManager& uman, + const GrEffectStage& stage) { + INHERITED::setData(uman, stage); const GrDiffuseLightingEffect& effect = - static_cast<const GrDiffuseLightingEffect&>(data); + static_cast<const GrDiffuseLightingEffect&>(*stage.getEffect()); uman.set1f(fKDUni, effect.kd()); } @@ -1297,9 +1297,10 @@ void GrGLSpecularLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkStr } void GrGLSpecularLightingEffect::setData(const GrGLUniformManager& uman, - const GrEffect& data) { - INHERITED::setData(uman, data); - const GrSpecularLightingEffect& effect = static_cast<const GrSpecularLightingEffect&>(data); + const GrEffectStage& stage) { + INHERITED::setData(uman, stage); + const GrSpecularLightingEffect& effect = + static_cast<const GrSpecularLightingEffect&>(*stage.getEffect()); uman.set1f(fKSUni, effect.ks()); uman.set1f(fShininessUni, effect.shininess()); } diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp index ea64e530e3..61a31aef8a 100644 --- a/src/effects/SkMagnifierImageFilter.cpp +++ b/src/effects/SkMagnifierImageFilter.cpp @@ -85,8 +85,7 @@ public: const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager& uman, - const GrEffect& data) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager& uman, const GrEffectStage& stage) SK_OVERRIDE; static inline EffectKey GenKey(const GrEffect&, const GrGLCaps&); @@ -165,9 +164,8 @@ void GrGLMagnifierEffect::emitFS(GrGLShaderBuilder* state, } void GrGLMagnifierEffect::setData(const GrGLUniformManager& uman, - const GrEffect& data) { - const GrMagnifierEffect& zoom = - static_cast<const GrMagnifierEffect&>(data); + const GrEffectStage& stage) { + const GrMagnifierEffect& zoom = static_cast<const GrMagnifierEffect&>(*stage.getEffect()); uman.set2f(fOffsetVar, zoom.x_offset(), zoom.y_offset()); uman.set2f(fZoomVar, zoom.x_zoom(), zoom.y_zoom()); diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp index a1ece00895..1b8efcfe21 100644 --- a/src/effects/SkMatrixConvolutionImageFilter.cpp +++ b/src/effects/SkMatrixConvolutionImageFilter.cpp @@ -293,7 +293,7 @@ public: static inline EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps); - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; private: typedef GrGLUniformManager::UniformHandle UniformHandle; @@ -425,11 +425,10 @@ GrGLEffect::EffectKey GrGLMatrixConvolutionEffect::GenKey(const GrEffect& s, } void GrGLMatrixConvolutionEffect::setData(const GrGLUniformManager& uman, - const GrEffect& data) { + const GrEffectStage& stage) { const GrMatrixConvolutionEffect& effect = - static_cast<const GrMatrixConvolutionEffect&>(data); - GrGLTexture& texture = - *static_cast<GrGLTexture*>(data.texture(0)); + static_cast<const GrMatrixConvolutionEffect&>(*stage.getEffect()); + GrGLTexture& texture = *static_cast<GrGLTexture*>(effect.texture(0)); // the code we generated was for a specific kernel size GrAssert(effect.kernelSize() == fKernelSize); GrAssert(effect.tileMode() == fTileMode); diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index 3273798b9d..f561eaaef4 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -281,7 +281,7 @@ public: static inline EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps); - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; private: int width() const { return GrMorphologyEffect::WidthFromRadius(fRadius); } @@ -349,11 +349,9 @@ GrGLEffect::EffectKey GrGLMorphologyEffect::GenKey(const GrEffect& s, return key; } -void GrGLMorphologyEffect::setData(const GrGLUniformManager& uman, const GrEffect& data) { - const Gr1DKernelEffect& kern = - static_cast<const Gr1DKernelEffect&>(data); - GrGLTexture& texture = - *static_cast<GrGLTexture*>(data.texture(0)); +void GrGLMorphologyEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + const Gr1DKernelEffect& kern = static_cast<const Gr1DKernelEffect&>(*stage.getEffect()); + GrGLTexture& texture = *static_cast<GrGLTexture*>(kern.texture(0)); // the code we generated was for a specific kernel radius GrAssert(kern.radius() == fRadius); float imageIncrement[2] = { 0 }; diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp index 16678c49cc..08ae4b96d2 100644 --- a/src/effects/SkTableColorFilter.cpp +++ b/src/effects/SkTableColorFilter.cpp @@ -257,7 +257,7 @@ public: const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE {} + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE {} static EffectKey GenKey(const GrEffect&, const GrGLCaps&); diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index f9bdf2f40e..04e301929a 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -687,8 +687,8 @@ void GrGLGradientEffect::setupVariables(GrGLShaderBuilder* builder) { kFloat_GrSLType, "GradientYCoordFS"); } -void GrGLGradientEffect::setData(const GrGLUniformManager& uman, const GrEffect& effect) { - GrScalar yCoord = static_cast<const GrGradientEffect&>(effect).getYCoord(); +void GrGLGradientEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + GrScalar yCoord = static_cast<const GrGradientEffect&>(*stage.getEffect()).getYCoord(); if (yCoord != fCachedYCoord) { uman.set1f(fFSYUni, yCoord); fCachedYCoord = yCoord; diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h index 194ff8c6d8..435e69d004 100644 --- a/src/effects/gradients/SkGradientShaderPriv.h +++ b/src/effects/gradients/SkGradientShaderPriv.h @@ -278,7 +278,7 @@ public: virtual ~GrGLGradientEffect(); virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; // emit code that gets a fragment's color from an expression for t; for now // this always uses the texture, but for simpler cases we'll be able to lerp diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp index 3c4560c909..5305b44b49 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp @@ -333,7 +333,7 @@ public: const char* outputColor, const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; static EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps); @@ -626,10 +626,9 @@ void GrGLConical2Gradient::emitFS(GrGLShaderBuilder* builder, } } -void GrGLConical2Gradient::setData(const GrGLUniformManager& uman, const GrEffect& baseData) { - INHERITED::setData(uman, baseData); - const GrConical2Gradient& data = - static_cast<const GrConical2Gradient&>(baseData); +void GrGLConical2Gradient::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + INHERITED::setData(uman, stage); + const GrConical2Gradient& data = static_cast<const GrConical2Gradient&>(*stage.getEffect()); GrAssert(data.isDegenerate() == fIsDegenerate); GrScalar centerX1 = data.center(); GrScalar radius0 = data.radius(); diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp index b37b568ad7..1758b451d8 100644 --- a/src/effects/gradients/SkTwoPointRadialGradient.cpp +++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp @@ -368,7 +368,7 @@ public: const char* outputColor, const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; static EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps); @@ -601,10 +601,9 @@ void GrGLRadial2Gradient::emitFS(GrGLShaderBuilder* builder, this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplers[0]); } -void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman, const GrEffect& baseData) { - INHERITED::setData(uman, baseData); - const GrRadial2Gradient& data = - static_cast<const GrRadial2Gradient&>(baseData); +void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + INHERITED::setData(uman, stage); + const GrRadial2Gradient& data = static_cast<const GrRadial2Gradient&>(*stage.getEffect()); GrAssert(data.isDegenerate() == fIsDegenerate); GrScalar centerX1 = data.center(); GrScalar radius0 = data.radius(); diff --git a/src/gpu/effects/GrConvolutionEffect.cpp b/src/gpu/effects/GrConvolutionEffect.cpp index 6930bec34c..51275a4ae9 100644 --- a/src/gpu/effects/GrConvolutionEffect.cpp +++ b/src/gpu/effects/GrConvolutionEffect.cpp @@ -27,7 +27,7 @@ public: const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager& uman, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager& uman, const GrEffectStage&) SK_OVERRIDE; static inline EffectKey GenKey(const GrEffect&, const GrGLCaps&); @@ -87,10 +87,9 @@ void GrGLConvolutionEffect::emitFS(GrGLShaderBuilder* builder, GrGLSLMulVarBy4f(&builder->fFSCode, 2, outputColor, inputColor); } -void GrGLConvolutionEffect::setData(const GrGLUniformManager& uman, const GrEffect& data) { - const GrConvolutionEffect& conv = - static_cast<const GrConvolutionEffect&>(data); - GrTexture& texture = *data.texture(0); +void GrGLConvolutionEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + const GrConvolutionEffect& conv = static_cast<const GrConvolutionEffect&>(*stage.getEffect()); + GrTexture& texture = *conv.texture(0); // the code we generated was for a specific kernel radius GrAssert(conv.radius() == fRadius); float imageIncrement[2] = { 0 }; diff --git a/src/gpu/effects/GrTextureDomainEffect.cpp b/src/gpu/effects/GrTextureDomainEffect.cpp index 1c2ad33cff..9afddcc618 100644 --- a/src/gpu/effects/GrTextureDomainEffect.cpp +++ b/src/gpu/effects/GrTextureDomainEffect.cpp @@ -21,7 +21,7 @@ public: const char* inputColor, const TextureSamplerArray&) SK_OVERRIDE; - virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE; + virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; static inline EffectKey GenKey(const GrEffect&, const GrGLCaps&) { return 0; } @@ -59,8 +59,9 @@ void GrGLTextureDomainEffect::emitFS(GrGLShaderBuilder* builder, builder->fFSCode.append(";\n"); } -void GrGLTextureDomainEffect::setData(const GrGLUniformManager& uman, const GrEffect& data) { - const GrTextureDomainEffect& effect = static_cast<const GrTextureDomainEffect&>(data); +void GrGLTextureDomainEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { + const GrTextureDomainEffect& effect = + static_cast<const GrTextureDomainEffect&>(*stage.getEffect()); const GrRect& domain = effect.domain(); float values[4] = { diff --git a/src/gpu/gl/GrGLEffect.cpp b/src/gpu/gl/GrGLEffect.cpp index b53a1cf9bb..0bbf1f7ccb 100644 --- a/src/gpu/gl/GrGLEffect.cpp +++ b/src/gpu/gl/GrGLEffect.cpp @@ -17,11 +17,11 @@ GrGLEffect::~GrGLEffect() { /////////////////////////////////////////////////////////////////////////////// -void GrGLEffect::setData(const GrGLUniformManager&, const GrEffect&) { +void GrGLEffect::setData(const GrGLUniformManager&, const GrEffectStage&) { } GrGLEffect::EffectKey GrGLEffect::GenTextureKey(const GrEffect& effect, - const GrGLCaps& caps) { + const GrGLCaps& caps) { EffectKey key = 0; for (int index = 0; index < effect.numTextures(); ++index) { const GrTextureAccess& access = effect.textureAccess(index); diff --git a/src/gpu/gl/GrGLEffect.h b/src/gpu/gl/GrGLEffect.h index 132c3d78de..ad097ed8ec 100644 --- a/src/gpu/gl/GrGLEffect.h +++ b/src/gpu/gl/GrGLEffect.h @@ -9,7 +9,7 @@ #define GrGLEffect_DEFINED #include "GrAllocator.h" -#include "GrEffect.h" +#include "GrEffectStage.h" #include "GrGLProgram.h" #include "GrGLShaderBuilder.h" #include "GrGLShaderVar.h" @@ -76,8 +76,10 @@ public: /** A GrGLEffect instance can be reused with any GrEffect that produces the same stage key; this function reads data from a stage and uploads any uniform variables required - by the shaders created in emitCode(). */ - virtual void setData(const GrGLUniformManager&, const GrEffect&); + by the shaders created in emitCode(). The GrEffect installed in the GrEffectStage is + guaranteed to be of the same type that created this GrGLEffect and to have an identical + EffectKey as the one that created this GrGLEffect. */ + virtual void setData(const GrGLUniformManager&, const GrEffectStage&); const char* name() const { return fFactory.name(); } diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp index 5634e2aa83..324fdc16e8 100644 --- a/src/gpu/gl/GrGLProgram.cpp +++ b/src/gpu/gl/GrGLProgram.cpp @@ -978,7 +978,7 @@ void GrGLProgram::setData(const GrDrawState& drawState) { if (NULL != fEffects[s]) { const GrEffectStage& stage = drawState.getStage(s); GrAssert(NULL != stage.getEffect()); - fEffects[s]->setData(fUniformManager, *stage.getEffect()); + fEffects[s]->setData(fUniformManager, stage); } } } |