| Index: src/effects/SkBitmapAlphaThresholdShader.cpp
|
| diff --git a/src/effects/SkBitmapAlphaThresholdShader.cpp b/src/effects/SkBitmapAlphaThresholdShader.cpp
|
| index 84cdbf262b29f43fbfe1678833d9db733fc1678b..c8db3a56cad6462ed70a019cbc74d124fe976784 100644
|
| --- a/src/effects/SkBitmapAlphaThresholdShader.cpp
|
| +++ b/src/effects/SkBitmapAlphaThresholdShader.cpp
|
| @@ -62,9 +62,9 @@ void BATShader::toString(SkString* str) const {
|
|
|
| #if SK_SUPPORT_GPU
|
| #include "GrContext.h"
|
| +#include "GrCoordTransform.h"
|
| #include "GrEffect.h"
|
| #include "gl/GrGLEffect.h"
|
| -#include "gl/GrGLEffectMatrix.h"
|
| #include "GrTBackendEffectFactory.h"
|
| #include "GrTextureAccess.h"
|
|
|
| @@ -109,36 +109,24 @@ public:
|
| GLEffect(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& e)
|
| : GrGLEffect(factory)
|
| - , fBmpMatrix(GrEffect::kLocal_CoordsType)
|
| - , fMaskMatrix(GrEffect::kLocal_CoordsType)
|
| , fPrevThreshold(-SK_Scalar1) {
|
| }
|
|
|
| virtual void emitCode(GrGLShaderBuilder* builder,
|
| - const GrDrawEffect& drawEffect,
|
| - EffectKey key,
|
| - const char* outputColor,
|
| - const char* inputColor,
|
| - const TextureSamplerArray& samplers) SK_OVERRIDE {
|
| - SkString bmpCoord;
|
| - SkString maskCoord;
|
| -
|
| - GrSLType bmpCoordType = fBmpMatrix.emitCode(builder, key, &bmpCoord, NULL, "Bmp");
|
| - EffectKey maskMatrixKey = key >> GrGLEffectMatrix::kKeyBits;
|
| - GrSLType maskCoordType = fMaskMatrix.emitCode(builder,
|
| - maskMatrixKey,
|
| - &maskCoord,
|
| - NULL,
|
| - "Mask");
|
| -
|
| + const GrDrawEffect& drawEffect,
|
| + EffectKey key,
|
| + const char* outputColor,
|
| + const char* inputColor,
|
| + const TransformedCoordsArray& coords,
|
| + const TextureSamplerArray& samplers) SK_OVERRIDE {
|
| // put bitmap color in "color"
|
| builder->fsCodeAppend("\t\tvec4 color = ");
|
| - builder->fsAppendTextureLookup(samplers[0], bmpCoord.c_str(), bmpCoordType);
|
| + builder->fsAppendTextureLookup(samplers[0], coords[0].c_str(), coords[0].type());
|
| builder->fsCodeAppend(";\n");
|
|
|
| // put alpha from mask texture in "mask"
|
| builder->fsCodeAppend("\t\tfloat mask = ");
|
| - builder->fsAppendTextureLookup(samplers[1], maskCoord.c_str(), maskCoordType);
|
| + builder->fsAppendTextureLookup(samplers[1], coords[1].c_str(), coords[1].type());
|
| builder->fsCodeAppend(".a;\n");
|
|
|
| const char* threshold;
|
| @@ -171,31 +159,12 @@ public:
|
|
|
| virtual void setData(const GrGLUniformManager& uman, const GrDrawEffect& e) SK_OVERRIDE {
|
| const ThresholdEffect& effect = e.castEffect<ThresholdEffect>();
|
| - fBmpMatrix.setData(uman, effect.fBmpMatrix, e, effect.fBmpAccess.getTexture());
|
| - fMaskMatrix.setData(uman, effect.fMaskMatrix, e, effect.fMaskAccess.getTexture());
|
| if (fPrevThreshold != effect.fThreshold) {
|
| uman.set1f(fThresholdUniHandle, effect.fThreshold);
|
| }
|
| }
|
|
|
| - static inline EffectKey GenKey(const GrDrawEffect& e, const GrGLCaps&) {
|
| - const ThresholdEffect& effect = e.castEffect<ThresholdEffect>();
|
| -
|
| - EffectKey bmpMKey = GrGLEffectMatrix::GenKey(effect.fBmpMatrix,
|
| - e,
|
| - GrEffect::kLocal_CoordsType,
|
| - effect.fBmpAccess.getTexture());
|
| - EffectKey maskMKey = GrGLEffectMatrix::GenKey(effect.fMaskMatrix,
|
| - e,
|
| - GrEffect::kLocal_CoordsType,
|
| - effect.fMaskAccess.getTexture());
|
| - return bmpMKey | (maskMKey << GrGLEffectMatrix::kKeyBits);
|
| - }
|
| -
|
| private:
|
| - GrGLEffectMatrix fBmpMatrix;
|
| - GrGLEffectMatrix fMaskMatrix;
|
| -
|
| GrGLUniformManager::UniformHandle fThresholdUniHandle;
|
| SkScalar fPrevThreshold;
|
| };
|
| @@ -206,12 +175,14 @@ private:
|
| ThresholdEffect(GrTexture* bmpTexture, const SkMatrix& bmpMatrix,
|
| GrTexture* maskTexture, const SkMatrix& maskMatrix,
|
| SkScalar threshold)
|
| - : fBmpAccess(bmpTexture, GrTextureParams())
|
| + : fBmpTransform(kLocal_GrCoordSet, bmpMatrix, bmpTexture)
|
| + , fBmpAccess(bmpTexture, GrTextureParams())
|
| + , fMaskTransform(kLocal_GrCoordSet, maskMatrix, maskTexture)
|
| , fMaskAccess(maskTexture, GrTextureParams())
|
| - , fBmpMatrix(bmpMatrix)
|
| - , fMaskMatrix(maskMatrix)
|
| , fThreshold(threshold) {
|
| + this->addCoordTransform(&fBmpTransform);
|
| this->addTextureAccess(&fBmpAccess);
|
| + this->addCoordTransform(&fMaskTransform);
|
| this->addTextureAccess(&fMaskAccess);
|
| }
|
|
|
| @@ -219,16 +190,15 @@ private:
|
| const ThresholdEffect& e = CastEffect<ThresholdEffect>(other);
|
| return e.fBmpAccess.getTexture() == fBmpAccess.getTexture() &&
|
| e.fMaskAccess.getTexture() == fMaskAccess.getTexture() &&
|
| - e.fBmpMatrix == fBmpMatrix &&
|
| - e.fMaskMatrix == fMaskMatrix &&
|
| + e.fBmpTransform.getMatrix() == fBmpTransform.getMatrix() &&
|
| + e.fMaskTransform.getMatrix() == fMaskTransform.getMatrix() &&
|
| e.fThreshold == fThreshold;
|
| }
|
|
|
| - GrTextureAccess fBmpAccess;
|
| - GrTextureAccess fMaskAccess;
|
| -
|
| - SkMatrix fBmpMatrix;
|
| - SkMatrix fMaskMatrix;
|
| + GrCoordTransform fBmpTransform;
|
| + GrTextureAccess fBmpAccess;
|
| + GrCoordTransform fMaskTransform;
|
| + GrTextureAccess fMaskAccess;
|
|
|
| SkScalar fThreshold;
|
| };
|
|
|