| 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 | 7 |
| 8 #include "gl/builders/GrGLProgramBuilder.h" | 8 #include "gl/builders/GrGLProgramBuilder.h" |
| 9 #include "GrRRectEffect.h" | 9 #include "GrRRectEffect.h" |
| 10 | 10 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 } | 132 } |
| 133 | 133 |
| 134 ////////////////////////////////////////////////////////////////////////////// | 134 ////////////////////////////////////////////////////////////////////////////// |
| 135 | 135 |
| 136 class GLCircularRRectEffect : public GrGLFragmentProcessor { | 136 class GLCircularRRectEffect : public GrGLFragmentProcessor { |
| 137 public: | 137 public: |
| 138 GLCircularRRectEffect(const GrBackendProcessorFactory&, const GrProcessor&); | 138 GLCircularRRectEffect(const GrBackendProcessorFactory&, const GrProcessor&); |
| 139 | 139 |
| 140 virtual void emitCode(GrGLFPBuilder* builder, | 140 virtual void emitCode(GrGLFPBuilder* builder, |
| 141 const GrFragmentProcessor& fp, | 141 const GrFragmentProcessor& fp, |
| 142 const GrProcessorKey& key, | |
| 143 const char* outputColor, | 142 const char* outputColor, |
| 144 const char* inputColor, | 143 const char* inputColor, |
| 145 const TransformedCoordsArray&, | 144 const TransformedCoordsArray&, |
| 146 const TextureSamplerArray&) SK_OVERRIDE; | 145 const TextureSamplerArray&) SK_OVERRIDE; |
| 147 | 146 |
| 148 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); | 147 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); |
| 149 | 148 |
| 150 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; | 149 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; |
| 151 | 150 |
| 152 private: | 151 private: |
| 153 GrGLProgramDataManager::UniformHandle fInnerRectUniform; | 152 GrGLProgramDataManager::UniformHandle fInnerRectUniform; |
| 154 GrGLProgramDataManager::UniformHandle fRadiusPlusHalfUniform; | 153 GrGLProgramDataManager::UniformHandle fRadiusPlusHalfUniform; |
| 155 SkRRect fPrevRRect; | 154 SkRRect fPrevRRect; |
| 156 typedef GrGLFragmentProcessor INHERITED; | 155 typedef GrGLFragmentProcessor INHERITED; |
| 157 }; | 156 }; |
| 158 | 157 |
| 159 GLCircularRRectEffect::GLCircularRRectEffect(const GrBackendProcessorFactory& fa
ctory, | 158 GLCircularRRectEffect::GLCircularRRectEffect(const GrBackendProcessorFactory& fa
ctory, |
| 160 const GrProcessor& ) | 159 const GrProcessor& ) |
| 161 : INHERITED (factory) { | 160 : INHERITED (factory) { |
| 162 fPrevRRect.setEmpty(); | 161 fPrevRRect.setEmpty(); |
| 163 } | 162 } |
| 164 | 163 |
| 165 void GLCircularRRectEffect::emitCode(GrGLFPBuilder* builder, | 164 void GLCircularRRectEffect::emitCode(GrGLFPBuilder* builder, |
| 166 const GrFragmentProcessor& fp, | 165 const GrFragmentProcessor& fp, |
| 167 const GrProcessorKey& key, | 166 const char* outputColor, |
| 168 const char* outputColor, | 167 const char* inputColor, |
| 169 const char* inputColor, | 168 const TransformedCoordsArray&, |
| 170 const TransformedCoordsArray&, | 169 const TextureSamplerArray& samplers) { |
| 171 const TextureSamplerArray& samplers) { | |
| 172 const CircularRRectEffect& crre = fp.cast<CircularRRectEffect>(); | 170 const CircularRRectEffect& crre = fp.cast<CircularRRectEffect>(); |
| 173 const char *rectName; | 171 const char *rectName; |
| 174 const char *radiusPlusHalfName; | 172 const char *radiusPlusHalfName; |
| 175 // The inner rect is the rrect bounds inset by the radius. Its left, top, ri
ght, and bottom | 173 // The inner rect is the rrect bounds inset by the radius. Its left, top, ri
ght, and bottom |
| 176 // edges correspond to components x, y, z, and w, respectively. When a side
of the rrect has | 174 // edges correspond to components x, y, z, and w, respectively. When a side
of the rrect has |
| 177 // only rectangular corners, that side's value corresponds to the rect edge'
s value outset by | 175 // only rectangular corners, that side's value corresponds to the rect edge'
s value outset by |
| 178 // half a pixel. | 176 // half a pixel. |
| 179 fInnerRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, | 177 fInnerRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, |
| 180 kVec4f_GrSLType, | 178 kVec4f_GrSLType, |
| 181 "innerRect", | 179 "innerRect", |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 } | 485 } |
| 488 | 486 |
| 489 ////////////////////////////////////////////////////////////////////////////// | 487 ////////////////////////////////////////////////////////////////////////////// |
| 490 | 488 |
| 491 class GLEllipticalRRectEffect : public GrGLFragmentProcessor { | 489 class GLEllipticalRRectEffect : public GrGLFragmentProcessor { |
| 492 public: | 490 public: |
| 493 GLEllipticalRRectEffect(const GrBackendProcessorFactory&, const GrProcessor&
); | 491 GLEllipticalRRectEffect(const GrBackendProcessorFactory&, const GrProcessor&
); |
| 494 | 492 |
| 495 virtual void emitCode(GrGLFPBuilder* builder, | 493 virtual void emitCode(GrGLFPBuilder* builder, |
| 496 const GrFragmentProcessor& effect, | 494 const GrFragmentProcessor& effect, |
| 497 const GrProcessorKey& key, | |
| 498 const char* outputColor, | 495 const char* outputColor, |
| 499 const char* inputColor, | 496 const char* inputColor, |
| 500 const TransformedCoordsArray&, | 497 const TransformedCoordsArray&, |
| 501 const TextureSamplerArray&) SK_OVERRIDE; | 498 const TextureSamplerArray&) SK_OVERRIDE; |
| 502 | 499 |
| 503 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); | 500 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); |
| 504 | 501 |
| 505 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; | 502 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; |
| 506 | 503 |
| 507 private: | 504 private: |
| 508 GrGLProgramDataManager::UniformHandle fInnerRectUniform; | 505 GrGLProgramDataManager::UniformHandle fInnerRectUniform; |
| 509 GrGLProgramDataManager::UniformHandle fInvRadiiSqdUniform; | 506 GrGLProgramDataManager::UniformHandle fInvRadiiSqdUniform; |
| 510 SkRRect fPrevRRect; | 507 SkRRect fPrevRRect; |
| 511 typedef GrGLFragmentProcessor INHERITED; | 508 typedef GrGLFragmentProcessor INHERITED; |
| 512 }; | 509 }; |
| 513 | 510 |
| 514 GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrBackendProcessorFactory
& factory, | 511 GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrBackendProcessorFactory
& factory, |
| 515 const GrProcessor& effect) | 512 const GrProcessor& effect) |
| 516 : INHERITED (factory) { | 513 : INHERITED (factory) { |
| 517 fPrevRRect.setEmpty(); | 514 fPrevRRect.setEmpty(); |
| 518 } | 515 } |
| 519 | 516 |
| 520 void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder, | 517 void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder, |
| 521 const GrFragmentProcessor& effect, | 518 const GrFragmentProcessor& effect, |
| 522 const GrProcessorKey& key, | |
| 523 const char* outputColor, | 519 const char* outputColor, |
| 524 const char* inputColor, | 520 const char* inputColor, |
| 525 const TransformedCoordsArray&, | 521 const TransformedCoordsArray&, |
| 526 const TextureSamplerArray& samplers) { | 522 const TextureSamplerArray& samplers) { |
| 527 const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>(); | 523 const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>(); |
| 528 const char *rectName; | 524 const char *rectName; |
| 529 // The inner rect is the rrect bounds inset by the x/y radii | 525 // The inner rect is the rrect bounds inset by the x/y radii |
| 530 fInnerRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, | 526 fInnerRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, |
| 531 kVec4f_GrSLType, | 527 kVec4f_GrSLType, |
| 532 "innerRect", | 528 "innerRect", |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 if (rrect.isNinePatch()) { | 725 if (rrect.isNinePatch()) { |
| 730 return EllipticalRRectEffect::Create(edgeType, rrect); | 726 return EllipticalRRectEffect::Create(edgeType, rrect); |
| 731 } | 727 } |
| 732 return NULL; | 728 return NULL; |
| 733 } | 729 } |
| 734 } | 730 } |
| 735 } | 731 } |
| 736 | 732 |
| 737 return NULL; | 733 return NULL; |
| 738 } | 734 } |
| OLD | NEW |