| 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 "GrOvalEffect.h" | 9 #include "GrOvalEffect.h" |
| 10 #include "GrInvariantOutput.h" | 10 #include "GrInvariantOutput.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 } | 96 } |
| 97 | 97 |
| 98 ////////////////////////////////////////////////////////////////////////////// | 98 ////////////////////////////////////////////////////////////////////////////// |
| 99 | 99 |
| 100 class GLCircleEffect : public GrGLFragmentProcessor { | 100 class GLCircleEffect : public GrGLFragmentProcessor { |
| 101 public: | 101 public: |
| 102 GLCircleEffect(const GrBackendProcessorFactory&, const GrProcessor&); | 102 GLCircleEffect(const GrBackendProcessorFactory&, const GrProcessor&); |
| 103 | 103 |
| 104 virtual void emitCode(GrGLFPBuilder* builder, | 104 virtual void emitCode(GrGLFPBuilder* builder, |
| 105 const GrFragmentProcessor& fp, | 105 const GrFragmentProcessor& fp, |
| 106 const GrProcessorKey& key, | |
| 107 const char* outputColor, | 106 const char* outputColor, |
| 108 const char* inputColor, | 107 const char* inputColor, |
| 109 const TransformedCoordsArray&, | 108 const TransformedCoordsArray&, |
| 110 const TextureSamplerArray&) SK_OVERRIDE; | 109 const TextureSamplerArray&) SK_OVERRIDE; |
| 111 | 110 |
| 112 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); | 111 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); |
| 113 | 112 |
| 114 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; | 113 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; |
| 115 | 114 |
| 116 private: | 115 private: |
| 117 GrGLProgramDataManager::UniformHandle fCircleUniform; | 116 GrGLProgramDataManager::UniformHandle fCircleUniform; |
| 118 SkPoint fPrevCenter; | 117 SkPoint fPrevCenter; |
| 119 SkScalar fPrevRadius; | 118 SkScalar fPrevRadius; |
| 120 | 119 |
| 121 typedef GrGLFragmentProcessor INHERITED; | 120 typedef GrGLFragmentProcessor INHERITED; |
| 122 }; | 121 }; |
| 123 | 122 |
| 124 GLCircleEffect::GLCircleEffect(const GrBackendProcessorFactory& factory, | 123 GLCircleEffect::GLCircleEffect(const GrBackendProcessorFactory& factory, |
| 125 const GrProcessor&) | 124 const GrProcessor&) |
| 126 : INHERITED (factory) { | 125 : INHERITED (factory) { |
| 127 fPrevRadius = -1.f; | 126 fPrevRadius = -1.f; |
| 128 } | 127 } |
| 129 | 128 |
| 130 void GLCircleEffect::emitCode(GrGLFPBuilder* builder, | 129 void GLCircleEffect::emitCode(GrGLFPBuilder* builder, |
| 131 const GrFragmentProcessor& fp, | 130 const GrFragmentProcessor& fp, |
| 132 const GrProcessorKey& key, | |
| 133 const char* outputColor, | 131 const char* outputColor, |
| 134 const char* inputColor, | 132 const char* inputColor, |
| 135 const TransformedCoordsArray&, | 133 const TransformedCoordsArray&, |
| 136 const TextureSamplerArray& samplers) { | 134 const TextureSamplerArray& samplers) { |
| 137 const CircleEffect& ce = fp.cast<CircleEffect>(); | 135 const CircleEffect& ce = fp.cast<CircleEffect>(); |
| 138 const char *circleName; | 136 const char *circleName; |
| 139 // The circle uniform is (center.x, center.y, radius + 0.5) for regular fill
s and | 137 // The circle uniform is (center.x, center.y, radius + 0.5) for regular fill
s and |
| 140 // (... ,radius - 0.5) for inverse fills. | 138 // (... ,radius - 0.5) for inverse fills. |
| 141 fCircleUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibilit
y, | 139 fCircleUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibilit
y, |
| 142 kVec3f_GrSLType, | 140 kVec3f_GrSLType, |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 } | 269 } |
| 272 | 270 |
| 273 ////////////////////////////////////////////////////////////////////////////// | 271 ////////////////////////////////////////////////////////////////////////////// |
| 274 | 272 |
| 275 class GLEllipseEffect : public GrGLFragmentProcessor { | 273 class GLEllipseEffect : public GrGLFragmentProcessor { |
| 276 public: | 274 public: |
| 277 GLEllipseEffect(const GrBackendProcessorFactory&, const GrProcessor&); | 275 GLEllipseEffect(const GrBackendProcessorFactory&, const GrProcessor&); |
| 278 | 276 |
| 279 virtual void emitCode(GrGLFPBuilder* builder, | 277 virtual void emitCode(GrGLFPBuilder* builder, |
| 280 const GrFragmentProcessor& fp, | 278 const GrFragmentProcessor& fp, |
| 281 const GrProcessorKey& key, | |
| 282 const char* outputColor, | 279 const char* outputColor, |
| 283 const char* inputColor, | 280 const char* inputColor, |
| 284 const TransformedCoordsArray&, | 281 const TransformedCoordsArray&, |
| 285 const TextureSamplerArray&) SK_OVERRIDE; | 282 const TextureSamplerArray&) SK_OVERRIDE; |
| 286 | 283 |
| 287 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); | 284 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe
yBuilder*); |
| 288 | 285 |
| 289 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; | 286 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; |
| 290 | 287 |
| 291 private: | 288 private: |
| 292 GrGLProgramDataManager::UniformHandle fEllipseUniform; | 289 GrGLProgramDataManager::UniformHandle fEllipseUniform; |
| 293 SkPoint fPrevCenter; | 290 SkPoint fPrevCenter; |
| 294 SkVector fPrevRadii; | 291 SkVector fPrevRadii; |
| 295 | 292 |
| 296 typedef GrGLFragmentProcessor INHERITED; | 293 typedef GrGLFragmentProcessor INHERITED; |
| 297 }; | 294 }; |
| 298 | 295 |
| 299 GLEllipseEffect::GLEllipseEffect(const GrBackendProcessorFactory& factory, | 296 GLEllipseEffect::GLEllipseEffect(const GrBackendProcessorFactory& factory, |
| 300 const GrProcessor& effect) | 297 const GrProcessor& effect) |
| 301 : INHERITED (factory) { | 298 : INHERITED (factory) { |
| 302 fPrevRadii.fX = -1.f; | 299 fPrevRadii.fX = -1.f; |
| 303 } | 300 } |
| 304 | 301 |
| 305 void GLEllipseEffect::emitCode(GrGLFPBuilder* builder, | 302 void GLEllipseEffect::emitCode(GrGLFPBuilder* builder, |
| 306 const GrFragmentProcessor& fp, | 303 const GrFragmentProcessor& fp, |
| 307 const GrProcessorKey& key, | |
| 308 const char* outputColor, | 304 const char* outputColor, |
| 309 const char* inputColor, | 305 const char* inputColor, |
| 310 const TransformedCoordsArray&, | 306 const TransformedCoordsArray&, |
| 311 const TextureSamplerArray& samplers) { | 307 const TextureSamplerArray& samplers) { |
| 312 const EllipseEffect& ee = fp.cast<EllipseEffect>(); | 308 const EllipseEffect& ee = fp.cast<EllipseEffect>(); |
| 313 const char *ellipseName; | 309 const char *ellipseName; |
| 314 // The ellipse uniform is (center.x, center.y, 1 / rx^2, 1 / ry^2) | 310 // The ellipse uniform is (center.x, center.y, 1 / rx^2, 1 / ry^2) |
| 315 fEllipseUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibili
ty, | 311 fEllipseUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibili
ty, |
| 316 kVec4f_GrSLType, | 312 kVec4f_GrSLType, |
| 317 "ellipse", | 313 "ellipse", |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 w /= 2; | 377 w /= 2; |
| 382 return CircleEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, oval
.fTop + w), w); | 378 return CircleEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, oval
.fTop + w), w); |
| 383 } else { | 379 } else { |
| 384 w /= 2; | 380 w /= 2; |
| 385 h /= 2; | 381 h /= 2; |
| 386 return EllipseEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, ova
l.fTop + h), w, h); | 382 return EllipseEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, ova
l.fTop + h), w, h); |
| 387 } | 383 } |
| 388 | 384 |
| 389 return NULL; | 385 return NULL; |
| 390 } | 386 } |
| OLD | NEW |