| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 #include "gl/builders/GrGLProgramBuilder.h" | |
| 8 #include "GrMatrixConvolutionEffect.h" | 7 #include "GrMatrixConvolutionEffect.h" |
| 9 #include "gl/GrGLProcessor.h" | 8 #include "gl/GrGLProcessor.h" |
| 10 #include "gl/GrGLSL.h" | 9 #include "gl/GrGLSL.h" |
| 11 #include "gl/GrGLTexture.h" | 10 #include "gl/GrGLTexture.h" |
| 12 #include "GrTBackendProcessorFactory.h" | 11 #include "gl/builders/GrGLProgramBuilder.h" |
| 13 | 12 |
| 14 class GrGLMatrixConvolutionEffect : public GrGLFragmentProcessor { | 13 class GrGLMatrixConvolutionEffect : public GrGLFragmentProcessor { |
| 15 public: | 14 public: |
| 16 GrGLMatrixConvolutionEffect(const GrBackendProcessorFactory& factory, | 15 GrGLMatrixConvolutionEffect(const GrProcessor&); |
| 17 const GrProcessor&); | |
| 18 virtual void emitCode(GrGLFPBuilder*, | 16 virtual void emitCode(GrGLFPBuilder*, |
| 19 const GrFragmentProcessor&, | 17 const GrFragmentProcessor&, |
| 20 const char* outputColor, | 18 const char* outputColor, |
| 21 const char* inputColor, | 19 const char* inputColor, |
| 22 const TransformedCoordsArray&, | 20 const TransformedCoordsArray&, |
| 23 const TextureSamplerArray&) SK_OVERRIDE; | 21 const TextureSamplerArray&) SK_OVERRIDE; |
| 24 | 22 |
| 25 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); | 23 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); |
| 26 | 24 |
| 27 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; | 25 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; |
| 28 | 26 |
| 29 private: | 27 private: |
| 30 typedef GrGLProgramDataManager::UniformHandle UniformHandle; | 28 typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
| 31 SkISize fKernelSize; | 29 SkISize fKernelSize; |
| 32 bool fConvolveAlpha; | 30 bool fConvolveAlpha; |
| 33 | 31 |
| 34 UniformHandle fBoundsUni; | 32 UniformHandle fBoundsUni; |
| 35 UniformHandle fKernelUni; | 33 UniformHandle fKernelUni; |
| 36 UniformHandle fImageIncrementUni; | 34 UniformHandle fImageIncrementUni; |
| 37 UniformHandle fKernelOffsetUni; | 35 UniformHandle fKernelOffsetUni; |
| 38 UniformHandle fGainUni; | 36 UniformHandle fGainUni; |
| 39 UniformHandle fBiasUni; | 37 UniformHandle fBiasUni; |
| 40 GrTextureDomain::GLDomain fDomain; | 38 GrTextureDomain::GLDomain fDomain; |
| 41 | 39 |
| 42 typedef GrGLFragmentProcessor INHERITED; | 40 typedef GrGLFragmentProcessor INHERITED; |
| 43 }; | 41 }; |
| 44 | 42 |
| 45 GrGLMatrixConvolutionEffect::GrGLMatrixConvolutionEffect(const GrBackendProcesso
rFactory& factory, | 43 GrGLMatrixConvolutionEffect::GrGLMatrixConvolutionEffect(const GrProcessor& proc
essor) { |
| 46 const GrProcessor& proc
essor) | |
| 47 : INHERITED(factory) { | |
| 48 const GrMatrixConvolutionEffect& m = processor.cast<GrMatrixConvolutionEffec
t>(); | 44 const GrMatrixConvolutionEffect& m = processor.cast<GrMatrixConvolutionEffec
t>(); |
| 49 fKernelSize = m.kernelSize(); | 45 fKernelSize = m.kernelSize(); |
| 50 fConvolveAlpha = m.convolveAlpha(); | 46 fConvolveAlpha = m.convolveAlpha(); |
| 51 } | 47 } |
| 52 | 48 |
| 53 void GrGLMatrixConvolutionEffect::emitCode(GrGLFPBuilder* builder, | 49 void GrGLMatrixConvolutionEffect::emitCode(GrGLFPBuilder* builder, |
| 54 const GrFragmentProcessor& fp, | 50 const GrFragmentProcessor& fp, |
| 55 const char* outputColor, | 51 const char* outputColor, |
| 56 const char* inputColor, | 52 const char* inputColor, |
| 57 const TransformedCoordsArray& coords, | 53 const TransformedCoordsArray& coords, |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 SkScalar bias, | 149 SkScalar bias, |
| 154 const SkIPoint& kernelOffse
t, | 150 const SkIPoint& kernelOffse
t, |
| 155 GrTextureDomain::Mode tileM
ode, | 151 GrTextureDomain::Mode tileM
ode, |
| 156 bool convolveAlpha) | 152 bool convolveAlpha) |
| 157 : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture)), | 153 : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture)), |
| 158 fKernelSize(kernelSize), | 154 fKernelSize(kernelSize), |
| 159 fGain(SkScalarToFloat(gain)), | 155 fGain(SkScalarToFloat(gain)), |
| 160 fBias(SkScalarToFloat(bias) / 255.0f), | 156 fBias(SkScalarToFloat(bias) / 255.0f), |
| 161 fConvolveAlpha(convolveAlpha), | 157 fConvolveAlpha(convolveAlpha), |
| 162 fDomain(GrTextureDomain::MakeTexelDomain(texture, bounds), tileMode) { | 158 fDomain(GrTextureDomain::MakeTexelDomain(texture, bounds), tileMode) { |
| 159 this->initClassID<GrMatrixConvolutionEffect>(); |
| 163 for (int i = 0; i < kernelSize.width() * kernelSize.height(); i++) { | 160 for (int i = 0; i < kernelSize.width() * kernelSize.height(); i++) { |
| 164 fKernel[i] = SkScalarToFloat(kernel[i]); | 161 fKernel[i] = SkScalarToFloat(kernel[i]); |
| 165 } | 162 } |
| 166 fKernelOffset[0] = static_cast<float>(kernelOffset.x()); | 163 fKernelOffset[0] = static_cast<float>(kernelOffset.x()); |
| 167 fKernelOffset[1] = static_cast<float>(kernelOffset.y()); | 164 fKernelOffset[1] = static_cast<float>(kernelOffset.y()); |
| 168 } | 165 } |
| 169 | 166 |
| 170 GrMatrixConvolutionEffect::~GrMatrixConvolutionEffect() { | 167 GrMatrixConvolutionEffect::~GrMatrixConvolutionEffect() { |
| 171 } | 168 } |
| 172 | 169 |
| 173 const GrBackendFragmentProcessorFactory& GrMatrixConvolutionEffect::getFactory()
const { | 170 void GrMatrixConvolutionEffect::getGLProcessorKey(const GrGLCaps& caps, |
| 174 return GrTBackendFragmentProcessorFactory<GrMatrixConvolutionEffect>::getIns
tance(); | 171 GrProcessorKeyBuilder* b) cons
t { |
| 172 GrGLMatrixConvolutionEffect::GenKey(*this, caps, b); |
| 173 } |
| 174 |
| 175 GrGLFragmentProcessor* GrMatrixConvolutionEffect::createGLInstance() const { |
| 176 return SkNEW_ARGS(GrGLMatrixConvolutionEffect, (*this)); |
| 175 } | 177 } |
| 176 | 178 |
| 177 bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons
t { | 179 bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons
t { |
| 178 const GrMatrixConvolutionEffect& s = sBase.cast<GrMatrixConvolutionEffect>()
; | 180 const GrMatrixConvolutionEffect& s = sBase.cast<GrMatrixConvolutionEffect>()
; |
| 179 return fKernelSize == s.kernelSize() && | 181 return fKernelSize == s.kernelSize() && |
| 180 !memcmp(fKernel, s.kernel(), | 182 !memcmp(fKernel, s.kernel(), |
| 181 fKernelSize.width() * fKernelSize.height() * sizeof(float)) &
& | 183 fKernelSize.width() * fKernelSize.height() * sizeof(float)) &
& |
| 182 fGain == s.gain() && | 184 fGain == s.gain() && |
| 183 fBias == s.bias() && | 185 fBias == s.bias() && |
| 184 fKernelOffset == s.kernelOffset() && | 186 fKernelOffset == s.kernelOffset() && |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 return GrMatrixConvolutionEffect::Create(textures[texIdx], | 265 return GrMatrixConvolutionEffect::Create(textures[texIdx], |
| 264 bounds, | 266 bounds, |
| 265 kernelSize, | 267 kernelSize, |
| 266 kernel.get(), | 268 kernel.get(), |
| 267 gain, | 269 gain, |
| 268 bias, | 270 bias, |
| 269 kernelOffset, | 271 kernelOffset, |
| 270 tileMode, | 272 tileMode, |
| 271 convolveAlpha); | 273 convolveAlpha); |
| 272 } | 274 } |
| OLD | NEW |