| Index: src/effects/SkMatrixConvolutionImageFilter.cpp
|
| diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
|
| index b3ce7ecc94e5faa58579439b50381ea8586d5422..d3505fbd636fe912fa24c922eaf647c28d40660a 100644
|
| --- a/src/effects/SkMatrixConvolutionImageFilter.cpp
|
| +++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
|
| @@ -19,7 +19,7 @@
|
| #include "GrTBackendEffectFactory.h"
|
| #include "GrTexture.h"
|
| #include "SkMatrix.h"
|
| -
|
| +#include "gl/GrGLShaderBuilder.h"
|
| #endif
|
|
|
| SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(const SkISize& kernelSize, const SkScalar* kernel, SkScalar gain, SkScalar bias, const SkIPoint& target, TileMode tileMode, bool convolveAlpha, SkImageFilter* input)
|
| @@ -328,20 +328,19 @@ public:
|
|
|
| static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&);
|
|
|
| - virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE;
|
| + virtual void setData(const GrGLContext&, const GrDrawEffect&) SK_OVERRIDE;
|
|
|
| private:
|
| - typedef GrGLUniformManager::UniformHandle UniformHandle;
|
| typedef SkMatrixConvolutionImageFilter::TileMode TileMode;
|
| SkISize fKernelSize;
|
| TileMode fTileMode;
|
| bool fConvolveAlpha;
|
|
|
| - UniformHandle fKernelUni;
|
| - UniformHandle fImageIncrementUni;
|
| - UniformHandle fTargetUni;
|
| - UniformHandle fGainUni;
|
| - UniformHandle fBiasUni;
|
| + GrGLUniform* fKernelUni;
|
| + GrGLUniform* fImageIncrementUni;
|
| + GrGLUniform* fTargetUni;
|
| + GrGLUniform* fGainUni;
|
| + GrGLUniform* fBiasUni;
|
|
|
| GrGLEffectMatrix fEffectMatrix;
|
|
|
| @@ -351,11 +350,11 @@ private:
|
| GrGLMatrixConvolutionEffect::GrGLMatrixConvolutionEffect(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& drawEffect)
|
| : INHERITED(factory)
|
| - , fKernelUni(GrGLUniformManager::kInvalidUniformHandle)
|
| - , fImageIncrementUni(GrGLUniformManager::kInvalidUniformHandle)
|
| - , fTargetUni(GrGLUniformManager::kInvalidUniformHandle)
|
| - , fGainUni(GrGLUniformManager::kInvalidUniformHandle)
|
| - , fBiasUni(GrGLUniformManager::kInvalidUniformHandle)
|
| + , fKernelUni(NULL)
|
| + , fImageIncrementUni(NULL)
|
| + , fTargetUni(NULL)
|
| + , fGainUni(NULL)
|
| + , fBiasUni(NULL)
|
| , fEffectMatrix(drawEffect.castEffect<GrMatrixConvolutionEffect>().coordsType()) {
|
| const GrMatrixConvolutionEffect& m = drawEffect.castEffect<GrMatrixConvolutionEffect>();
|
| fKernelSize = m.kernelSize();
|
| @@ -392,22 +391,33 @@ void GrGLMatrixConvolutionEffect::emitCode(GrGLShaderBuilder* builder,
|
| const TextureSamplerArray& samplers) {
|
| const char* coords;
|
| fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, &coords);
|
| - fImageIncrementUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kVec2f_GrSLType, "ImageIncrement");
|
| - fKernelUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "Kernel", fKernelSize.width() * fKernelSize.height());
|
| - fTargetUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kVec2f_GrSLType, "Target");
|
| - fGainUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "Gain");
|
| - fBiasUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "Bias");
|
| -
|
| - const char* target = builder->getUniformCStr(fTargetUni);
|
| - const char* imgInc = builder->getUniformCStr(fImageIncrementUni);
|
| - const char* kernel = builder->getUniformCStr(fKernelUni);
|
| - const char* gain = builder->getUniformCStr(fGainUni);
|
| - const char* bias = builder->getUniformCStr(fBiasUni);
|
| +
|
| + GrGLShaderBuilder::Uniform* imageIncrementUni =
|
| + builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kVec2f_GrSLType, "ImageIncrement");
|
| + fImageIncrementUni = imageIncrementUni->glUniform();
|
| +
|
| + GrGLShaderBuilder::Uniform* kernelUni =
|
| + builder->addUniformArray(GrGLShaderBuilder::kFragment_ShaderType,
|
| + kFloat_GrSLType, "Kernel", fKernelSize.width() * fKernelSize.height());
|
| + fKernelUni = kernelUni->glUniform();
|
| +
|
| + GrGLShaderBuilder::Uniform* targetUni =
|
| + builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kVec2f_GrSLType, "Target");
|
| + fTargetUni = targetUni->glUniform();
|
| +
|
| + GrGLShaderBuilder::Uniform* gainUni =
|
| + builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kFloat_GrSLType, "Gain");
|
| + fGainUni = gainUni->glUniform();
|
| +
|
| + GrGLShaderBuilder::Uniform* biasUni =
|
| + builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kFloat_GrSLType, "Bias");
|
| + fBiasUni = biasUni->glUniform();
|
| +
|
| + const char* target = targetUni->c_str();
|
| + const char* imgInc = imageIncrementUni->c_str();
|
| + const char* kernel = kernelUni->c_str();
|
| + const char* gain = gainUni->c_str();
|
| + const char* bias = biasUni->c_str();
|
| int kWidth = fKernelSize.width();
|
| int kHeight = fKernelSize.height();
|
|
|
| @@ -465,7 +475,7 @@ GrGLEffect::EffectKey GrGLMatrixConvolutionEffect::GenKey(const GrDrawEffect& dr
|
| return key | matrixKey;
|
| }
|
|
|
| -void GrGLMatrixConvolutionEffect::setData(const GrGLUniformManager& uman,
|
| +void GrGLMatrixConvolutionEffect::setData(const GrGLContext& context,
|
| const GrDrawEffect& drawEffect) {
|
| const GrMatrixConvolutionEffect& conv = drawEffect.castEffect<GrMatrixConvolutionEffect>();
|
| GrTexture& texture = *conv.texture(0);
|
| @@ -476,12 +486,12 @@ void GrGLMatrixConvolutionEffect::setData(const GrGLUniformManager& uman,
|
| float ySign = texture.origin() == kTopLeft_GrSurfaceOrigin ? 1.0f : -1.0f;
|
| imageIncrement[0] = 1.0f / texture.width();
|
| imageIncrement[1] = ySign / texture.height();
|
| - uman.set2fv(fImageIncrementUni, 0, 1, imageIncrement);
|
| - uman.set2fv(fTargetUni, 0, 1, conv.target());
|
| - uman.set1fv(fKernelUni, 0, fKernelSize.width() * fKernelSize.height(), conv.kernel());
|
| - uman.set1f(fGainUni, conv.gain());
|
| - uman.set1f(fBiasUni, conv.bias());
|
| - fEffectMatrix.setData(uman,
|
| + fImageIncrementUni->set2fv(context, 0, 1, imageIncrement);
|
| + fTargetUni->set2fv(context, 0, 1, conv.target());
|
| + fKernelUni->set1fv(context, 0, fKernelSize.width() * fKernelSize.height(), conv.kernel());
|
| + fGainUni->set1f(context, conv.gain());
|
| + fBiasUni->set1f(context, conv.bias());
|
| + fEffectMatrix.setData(context,
|
| conv.getMatrix(),
|
| drawEffect,
|
| conv.texture(0));
|
|
|