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)); |