| 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 "GrMatrixConvolutionEffect.h" | 7 #include "GrMatrixConvolutionEffect.h" |
| 8 #include "gl/GrGLFragmentProcessor.h" | 8 #include "glsl/GrGLSLFragmentProcessor.h" |
| 9 #include "gl/GrGLTexture.h" | 9 #include "glsl/GrGLSLProgramBuilder.h" |
| 10 #include "gl/builders/GrGLProgramBuilder.h" | |
| 11 #include "glsl/GrGLSLProgramDataManager.h" | 10 #include "glsl/GrGLSLProgramDataManager.h" |
| 12 | 11 |
| 13 class GrGLMatrixConvolutionEffect : public GrGLFragmentProcessor { | 12 class GrGLMatrixConvolutionEffect : public GrGLSLFragmentProcessor { |
| 14 public: | 13 public: |
| 15 GrGLMatrixConvolutionEffect(const GrProcessor&); | 14 GrGLMatrixConvolutionEffect(const GrProcessor&); |
| 16 virtual void emitCode(EmitArgs&) override; | 15 virtual void emitCode(EmitArgs&) override; |
| 17 | 16 |
| 18 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder*); | 17 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder*); |
| 19 | 18 |
| 20 protected: | 19 protected: |
| 21 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 20 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
| 22 | 21 |
| 23 private: | 22 private: |
| 24 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; | 23 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
| 25 SkISize fKernelSize; | 24 SkISize fKernelSize; |
| 26 bool fConvolveAlpha; | 25 bool fConvolveAlpha; |
| 27 | 26 |
| 28 UniformHandle fKernelUni; | 27 UniformHandle fKernelUni; |
| 29 UniformHandle fImageIncrementUni; | 28 UniformHandle fImageIncrementUni; |
| 30 UniformHandle fKernelOffsetUni; | 29 UniformHandle fKernelOffsetUni; |
| 31 UniformHandle fGainUni; | 30 UniformHandle fGainUni; |
| 32 UniformHandle fBiasUni; | 31 UniformHandle fBiasUni; |
| 33 GrTextureDomain::GLDomain fDomain; | 32 GrTextureDomain::GLDomain fDomain; |
| 34 | 33 |
| 35 typedef GrGLFragmentProcessor INHERITED; | 34 typedef GrGLSLFragmentProcessor INHERITED; |
| 36 }; | 35 }; |
| 37 | 36 |
| 38 GrGLMatrixConvolutionEffect::GrGLMatrixConvolutionEffect(const GrProcessor& proc
essor) { | 37 GrGLMatrixConvolutionEffect::GrGLMatrixConvolutionEffect(const GrProcessor& proc
essor) { |
| 39 const GrMatrixConvolutionEffect& m = processor.cast<GrMatrixConvolutionEffec
t>(); | 38 const GrMatrixConvolutionEffect& m = processor.cast<GrMatrixConvolutionEffec
t>(); |
| 40 fKernelSize = m.kernelSize(); | 39 fKernelSize = m.kernelSize(); |
| 41 fConvolveAlpha = m.convolveAlpha(); | 40 fConvolveAlpha = m.convolveAlpha(); |
| 42 } | 41 } |
| 43 | 42 |
| 44 void GrGLMatrixConvolutionEffect::emitCode(EmitArgs& args) { | 43 void GrGLMatrixConvolutionEffect::emitCode(EmitArgs& args) { |
| 45 const GrTextureDomain& domain = args.fFp.cast<GrMatrixConvolutionEffect>().d
omain(); | 44 const GrTextureDomain& domain = args.fFp.cast<GrMatrixConvolutionEffect>().d
omain(); |
| 46 fImageIncrementUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment
_Visibility, | 45 fImageIncrementUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragme
nt_Visibility, |
| 47 kVec2f_GrSLType, kDefault_GrSLPreci
sion, | 46 kVec2f_GrSLType, kDefault_GrSLPreci
sion, |
| 48 "ImageIncrement"); | 47 "ImageIncrement"); |
| 49 fKernelUni = args.fBuilder->addUniformArray(GrGLProgramBuilder::kFragment_Vi
sibility, | 48 fKernelUni = args.fBuilder->addUniformArray(GrGLSLProgramBuilder::kFragment_
Visibility, |
| 50 kFloat_GrSLType, kDefault_GrSLPrecisio
n, | 49 kFloat_GrSLType, kDefault_GrSLPrecisio
n, |
| 51 "Kernel", | 50 "Kernel", |
| 52 fKernelSize.width() * fKernelSize.heig
ht()); | 51 fKernelSize.width() * fKernelSize.heig
ht()); |
| 53 fKernelOffsetUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_V
isibility, | 52 fKernelOffsetUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment
_Visibility, |
| 54 kVec2f_GrSLType, kDefault_GrSLPrecisi
on, "KernelOffset"); | 53 kVec2f_GrSLType, kDefault_GrSLPrecisi
on, "KernelOffset"); |
| 55 fGainUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibilit
y, | 54 fGainUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibil
ity, |
| 56 kFloat_GrSLType, kDefault_GrSLPrecision, "Gai
n"); | 55 kFloat_GrSLType, kDefault_GrSLPrecision, "Gai
n"); |
| 57 fBiasUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibilit
y, | 56 fBiasUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibil
ity, |
| 58 kFloat_GrSLType, kDefault_GrSLPrecision, "Bia
s"); | 57 kFloat_GrSLType, kDefault_GrSLPrecision, "Bia
s"); |
| 59 | 58 |
| 60 const char* kernelOffset = args.fBuilder->getUniformCStr(fKernelOffsetUni); | 59 const char* kernelOffset = args.fBuilder->getUniformCStr(fKernelOffsetUni); |
| 61 const char* imgInc = args.fBuilder->getUniformCStr(fImageIncrementUni); | 60 const char* imgInc = args.fBuilder->getUniformCStr(fImageIncrementUni); |
| 62 const char* kernel = args.fBuilder->getUniformCStr(fKernelUni); | 61 const char* kernel = args.fBuilder->getUniformCStr(fKernelUni); |
| 63 const char* gain = args.fBuilder->getUniformCStr(fGainUni); | 62 const char* gain = args.fBuilder->getUniformCStr(fGainUni); |
| 64 const char* bias = args.fBuilder->getUniformCStr(fBiasUni); | 63 const char* bias = args.fBuilder->getUniformCStr(fBiasUni); |
| 65 int kWidth = fKernelSize.width(); | 64 int kWidth = fKernelSize.width(); |
| 66 int kHeight = fKernelSize.height(); | 65 int kHeight = fKernelSize.height(); |
| 67 | 66 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 } | 153 } |
| 155 | 154 |
| 156 GrMatrixConvolutionEffect::~GrMatrixConvolutionEffect() { | 155 GrMatrixConvolutionEffect::~GrMatrixConvolutionEffect() { |
| 157 } | 156 } |
| 158 | 157 |
| 159 void GrMatrixConvolutionEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 158 void GrMatrixConvolutionEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
| 160 GrProcessorKeyBuilder* b) cons
t { | 159 GrProcessorKeyBuilder* b) cons
t { |
| 161 GrGLMatrixConvolutionEffect::GenKey(*this, caps, b); | 160 GrGLMatrixConvolutionEffect::GenKey(*this, caps, b); |
| 162 } | 161 } |
| 163 | 162 |
| 164 GrGLFragmentProcessor* GrMatrixConvolutionEffect::onCreateGLInstance() const { | 163 GrGLSLFragmentProcessor* GrMatrixConvolutionEffect::onCreateGLInstance() const
{ |
| 165 return new GrGLMatrixConvolutionEffect(*this); | 164 return new GrGLMatrixConvolutionEffect(*this); |
| 166 } | 165 } |
| 167 | 166 |
| 168 bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons
t { | 167 bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons
t { |
| 169 const GrMatrixConvolutionEffect& s = sBase.cast<GrMatrixConvolutionEffect>()
; | 168 const GrMatrixConvolutionEffect& s = sBase.cast<GrMatrixConvolutionEffect>()
; |
| 170 return fKernelSize == s.kernelSize() && | 169 return fKernelSize == s.kernelSize() && |
| 171 !memcmp(fKernel, s.kernel(), | 170 !memcmp(fKernel, s.kernel(), |
| 172 fKernelSize.width() * fKernelSize.height() * sizeof(float)) &
& | 171 fKernelSize.width() * fKernelSize.height() * sizeof(float)) &
& |
| 173 fGain == s.gain() && | 172 fGain == s.gain() && |
| 174 fBias == s.bias() && | 173 fBias == s.bias() && |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 return GrMatrixConvolutionEffect::Create(d->fTextures[texIdx], | 244 return GrMatrixConvolutionEffect::Create(d->fTextures[texIdx], |
| 246 bounds, | 245 bounds, |
| 247 kernelSize, | 246 kernelSize, |
| 248 kernel.get(), | 247 kernel.get(), |
| 249 gain, | 248 gain, |
| 250 bias, | 249 bias, |
| 251 kernelOffset, | 250 kernelOffset, |
| 252 tileMode, | 251 tileMode, |
| 253 convolveAlpha); | 252 convolveAlpha); |
| 254 } | 253 } |
| OLD | NEW |