| 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/GrGLProcessor.h" | 8 #include "gl/GrGLProcessor.h" |
| 9 #include "gl/GrGLSL.h" | 9 #include "gl/GrGLSL.h" |
| 10 #include "gl/GrGLTexture.h" | 10 #include "gl/GrGLTexture.h" |
| 11 #include "gl/builders/GrGLProgramBuilder.h" | 11 #include "gl/builders/GrGLProgramBuilder.h" |
| 12 | 12 |
| 13 class GrGLMatrixConvolutionEffect : public GrGLFragmentProcessor { | 13 class GrGLMatrixConvolutionEffect : public GrGLFragmentProcessor { |
| 14 public: | 14 public: |
| 15 GrGLMatrixConvolutionEffect(const GrProcessor&); | 15 GrGLMatrixConvolutionEffect(const GrProcessor&); |
| 16 virtual void emitCode(GrGLFPBuilder*, | 16 virtual void emitCode(GrGLFPBuilder*, |
| 17 const GrFragmentProcessor&, | 17 const GrFragmentProcessor&, |
| 18 const char* outputColor, | 18 const char* outputColor, |
| 19 const char* inputColor, | 19 const char* inputColor, |
| 20 const TransformedCoordsArray&, | 20 const TransformedCoordsArray&, |
| 21 const TextureSamplerArray&) override; | 21 const TextureSamplerArray&) override; |
| 22 | 22 |
| 23 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); | 23 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder*); |
| 24 | 24 |
| 25 void setData(const GrGLProgramDataManager&, const GrProcessor&) override; | 25 void setData(const GrGLProgramDataManager&, const GrProcessor&) override; |
| 26 | 26 |
| 27 private: | 27 private: |
| 28 typedef GrGLProgramDataManager::UniformHandle UniformHandle; | 28 typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
| 29 SkISize fKernelSize; | 29 SkISize fKernelSize; |
| 30 bool fConvolveAlpha; | 30 bool fConvolveAlpha; |
| 31 | 31 |
| 32 UniformHandle fKernelUni; | 32 UniformHandle fKernelUni; |
| 33 UniformHandle fImageIncrementUni; | 33 UniformHandle fImageIncrementUni; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 fsBuilder->codeAppendf("%s.rgb = sum.rgb * %s + %s;", outputColor, gain,
bias); | 105 fsBuilder->codeAppendf("%s.rgb = sum.rgb * %s + %s;", outputColor, gain,
bias); |
| 106 fsBuilder->codeAppendf("%s.rgb *= %s.a;", outputColor, outputColor); | 106 fsBuilder->codeAppendf("%s.rgb *= %s.a;", outputColor, outputColor); |
| 107 } | 107 } |
| 108 | 108 |
| 109 SkString modulate; | 109 SkString modulate; |
| 110 GrGLSLMulVarBy4f(&modulate, outputColor, inputColor); | 110 GrGLSLMulVarBy4f(&modulate, outputColor, inputColor); |
| 111 fsBuilder->codeAppend(modulate.c_str()); | 111 fsBuilder->codeAppend(modulate.c_str()); |
| 112 } | 112 } |
| 113 | 113 |
| 114 void GrGLMatrixConvolutionEffect::GenKey(const GrProcessor& processor, | 114 void GrGLMatrixConvolutionEffect::GenKey(const GrProcessor& processor, |
| 115 const GrGLCaps&, GrProcessorKeyBuilder*
b) { | 115 const GrGLSLCaps&, GrProcessorKeyBuilde
r* b) { |
| 116 const GrMatrixConvolutionEffect& m = processor.cast<GrMatrixConvolutionEffec
t>(); | 116 const GrMatrixConvolutionEffect& m = processor.cast<GrMatrixConvolutionEffec
t>(); |
| 117 SkASSERT(m.kernelSize().width() <= 0x7FFF && m.kernelSize().height() <= 0xFF
FF); | 117 SkASSERT(m.kernelSize().width() <= 0x7FFF && m.kernelSize().height() <= 0xFF
FF); |
| 118 uint32_t key = m.kernelSize().width() << 16 | m.kernelSize().height(); | 118 uint32_t key = m.kernelSize().width() << 16 | m.kernelSize().height(); |
| 119 key |= m.convolveAlpha() ? 1 << 31 : 0; | 119 key |= m.convolveAlpha() ? 1 << 31 : 0; |
| 120 b->add32(key); | 120 b->add32(key); |
| 121 b->add32(GrTextureDomain::GLDomain::DomainKey(m.domain())); | 121 b->add32(GrTextureDomain::GLDomain::DomainKey(m.domain())); |
| 122 } | 122 } |
| 123 | 123 |
| 124 void GrGLMatrixConvolutionEffect::setData(const GrGLProgramDataManager& pdman, | 124 void GrGLMatrixConvolutionEffect::setData(const GrGLProgramDataManager& pdman, |
| 125 const GrProcessor& processor) { | 125 const GrProcessor& processor) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 for (int i = 0; i < kernelSize.width() * kernelSize.height(); i++) { | 158 for (int i = 0; i < kernelSize.width() * kernelSize.height(); i++) { |
| 159 fKernel[i] = SkScalarToFloat(kernel[i]); | 159 fKernel[i] = SkScalarToFloat(kernel[i]); |
| 160 } | 160 } |
| 161 fKernelOffset[0] = static_cast<float>(kernelOffset.x()); | 161 fKernelOffset[0] = static_cast<float>(kernelOffset.x()); |
| 162 fKernelOffset[1] = static_cast<float>(kernelOffset.y()); | 162 fKernelOffset[1] = static_cast<float>(kernelOffset.y()); |
| 163 } | 163 } |
| 164 | 164 |
| 165 GrMatrixConvolutionEffect::~GrMatrixConvolutionEffect() { | 165 GrMatrixConvolutionEffect::~GrMatrixConvolutionEffect() { |
| 166 } | 166 } |
| 167 | 167 |
| 168 void GrMatrixConvolutionEffect::getGLProcessorKey(const GrGLCaps& caps, | 168 void GrMatrixConvolutionEffect::getGLProcessorKey(const GrGLSLCaps& caps, |
| 169 GrProcessorKeyBuilder* b) cons
t { | 169 GrProcessorKeyBuilder* b) cons
t { |
| 170 GrGLMatrixConvolutionEffect::GenKey(*this, caps, b); | 170 GrGLMatrixConvolutionEffect::GenKey(*this, caps, b); |
| 171 } | 171 } |
| 172 | 172 |
| 173 GrGLFragmentProcessor* GrMatrixConvolutionEffect::createGLInstance() const { | 173 GrGLFragmentProcessor* GrMatrixConvolutionEffect::createGLInstance() const { |
| 174 return SkNEW_ARGS(GrGLMatrixConvolutionEffect, (*this)); | 174 return SkNEW_ARGS(GrGLMatrixConvolutionEffect, (*this)); |
| 175 } | 175 } |
| 176 | 176 |
| 177 bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons
t { | 177 bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons
t { |
| 178 const GrMatrixConvolutionEffect& s = sBase.cast<GrMatrixConvolutionEffect>()
; | 178 const GrMatrixConvolutionEffect& s = sBase.cast<GrMatrixConvolutionEffect>()
; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 return GrMatrixConvolutionEffect::Create(textures[texIdx], | 263 return GrMatrixConvolutionEffect::Create(textures[texIdx], |
| 264 bounds, | 264 bounds, |
| 265 kernelSize, | 265 kernelSize, |
| 266 kernel.get(), | 266 kernel.get(), |
| 267 gain, | 267 gain, |
| 268 bias, | 268 bias, |
| 269 kernelOffset, | 269 kernelOffset, |
| 270 tileMode, | 270 tileMode, |
| 271 convolveAlpha); | 271 convolveAlpha); |
| 272 } | 272 } |
| OLD | NEW |