| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 | 7 |
| 8 #include "GrConvolutionEffect.h" | 8 #include "GrConvolutionEffect.h" |
| 9 #include "gl/GrGLFragmentProcessor.h" | 9 #include "glsl/GrGLSLFragmentProcessor.h" |
| 10 #include "gl/GrGLTexture.h" | |
| 11 #include "glsl/GrGLSLFragmentShaderBuilder.h" | 10 #include "glsl/GrGLSLFragmentShaderBuilder.h" |
| 12 #include "glsl/GrGLSLProgramBuilder.h" | 11 #include "glsl/GrGLSLProgramBuilder.h" |
| 13 #include "glsl/GrGLSLProgramDataManager.h" | 12 #include "glsl/GrGLSLProgramDataManager.h" |
| 14 | 13 |
| 15 // For brevity | 14 // For brevity |
| 16 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; | 15 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
| 17 | 16 |
| 18 class GrGLConvolutionEffect : public GrGLFragmentProcessor { | 17 class GrGLConvolutionEffect : public GrGLSLFragmentProcessor { |
| 19 public: | 18 public: |
| 20 GrGLConvolutionEffect(const GrProcessor&); | 19 GrGLConvolutionEffect(const GrProcessor&); |
| 21 | 20 |
| 22 virtual void emitCode(EmitArgs&) override; | 21 virtual void emitCode(EmitArgs&) override; |
| 23 | 22 |
| 24 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder*); | 23 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder*); |
| 25 | 24 |
| 26 protected: | 25 protected: |
| 27 void onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor&) ov
erride; | 26 void onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor&) ov
erride; |
| 28 | 27 |
| 29 private: | 28 private: |
| 30 int width() const { return Gr1DKernelEffect::WidthFromRadius(fRadius); } | 29 int width() const { return Gr1DKernelEffect::WidthFromRadius(fRadius); } |
| 31 bool useBounds() const { return fUseBounds; } | 30 bool useBounds() const { return fUseBounds; } |
| 32 Gr1DKernelEffect::Direction direction() const { return fDirection; } | 31 Gr1DKernelEffect::Direction direction() const { return fDirection; } |
| 33 | 32 |
| 34 int fRadius; | 33 int fRadius; |
| 35 bool fUseBounds; | 34 bool fUseBounds; |
| 36 Gr1DKernelEffect::Direction fDirection; | 35 Gr1DKernelEffect::Direction fDirection; |
| 37 UniformHandle fKernelUni; | 36 UniformHandle fKernelUni; |
| 38 UniformHandle fImageIncrementUni; | 37 UniformHandle fImageIncrementUni; |
| 39 UniformHandle fBoundsUni; | 38 UniformHandle fBoundsUni; |
| 40 | 39 |
| 41 typedef GrGLFragmentProcessor INHERITED; | 40 typedef GrGLSLFragmentProcessor INHERITED; |
| 42 }; | 41 }; |
| 43 | 42 |
| 44 GrGLConvolutionEffect::GrGLConvolutionEffect(const GrProcessor& processor) { | 43 GrGLConvolutionEffect::GrGLConvolutionEffect(const GrProcessor& processor) { |
| 45 const GrConvolutionEffect& c = processor.cast<GrConvolutionEffect>(); | 44 const GrConvolutionEffect& c = processor.cast<GrConvolutionEffect>(); |
| 46 fRadius = c.radius(); | 45 fRadius = c.radius(); |
| 47 fUseBounds = c.useBounds(); | 46 fUseBounds = c.useBounds(); |
| 48 fDirection = c.direction(); | 47 fDirection = c.direction(); |
| 49 } | 48 } |
| 50 | 49 |
| 51 void GrGLConvolutionEffect::emitCode(EmitArgs& args) { | 50 void GrGLConvolutionEffect::emitCode(EmitArgs& args) { |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 } | 192 } |
| 194 | 193 |
| 195 GrConvolutionEffect::~GrConvolutionEffect() { | 194 GrConvolutionEffect::~GrConvolutionEffect() { |
| 196 } | 195 } |
| 197 | 196 |
| 198 void GrConvolutionEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 197 void GrConvolutionEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
| 199 GrProcessorKeyBuilder* b) const { | 198 GrProcessorKeyBuilder* b) const { |
| 200 GrGLConvolutionEffect::GenKey(*this, caps, b); | 199 GrGLConvolutionEffect::GenKey(*this, caps, b); |
| 201 } | 200 } |
| 202 | 201 |
| 203 GrGLFragmentProcessor* GrConvolutionEffect::onCreateGLInstance() const { | 202 GrGLSLFragmentProcessor* GrConvolutionEffect::onCreateGLInstance() const { |
| 204 return new GrGLConvolutionEffect(*this); | 203 return new GrGLConvolutionEffect(*this); |
| 205 } | 204 } |
| 206 | 205 |
| 207 bool GrConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) const { | 206 bool GrConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) const { |
| 208 const GrConvolutionEffect& s = sBase.cast<GrConvolutionEffect>(); | 207 const GrConvolutionEffect& s = sBase.cast<GrConvolutionEffect>(); |
| 209 return (this->radius() == s.radius() && | 208 return (this->radius() == s.radius() && |
| 210 this->direction() == s.direction() && | 209 this->direction() == s.direction() && |
| 211 this->useBounds() == s.useBounds() && | 210 this->useBounds() == s.useBounds() && |
| 212 0 == memcmp(fBounds, s.fBounds, sizeof(fBounds)) && | 211 0 == memcmp(fBounds, s.fBounds, sizeof(fBounds)) && |
| 213 0 == memcmp(fKernel, s.fKernel, this->width() * sizeof(float))); | 212 0 == memcmp(fKernel, s.fKernel, this->width() * sizeof(float))); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 232 } | 231 } |
| 233 | 232 |
| 234 bool useBounds = d->fRandom->nextBool(); | 233 bool useBounds = d->fRandom->nextBool(); |
| 235 return GrConvolutionEffect::Create(d->fTextures[texIdx], | 234 return GrConvolutionEffect::Create(d->fTextures[texIdx], |
| 236 dir, | 235 dir, |
| 237 radius, | 236 radius, |
| 238 kernel, | 237 kernel, |
| 239 useBounds, | 238 useBounds, |
| 240 bounds); | 239 bounds); |
| 241 } | 240 } |
| OLD | NEW |