Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp

Issue 778453002: Remove backend factories (Closed) Base URL: https://skia.googlesource.com/skia.git@unichoice
Patch Set: more clang warnings Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "SkTwoPointConicalGradient_gpu.h" 9 #include "SkTwoPointConicalGradient_gpu.h"
10 10
11 #include "SkTwoPointConicalGradient.h" 11 #include "SkTwoPointConicalGradient.h"
12 12
13 #if SK_SUPPORT_GPU 13 #if SK_SUPPORT_GPU
14 #include "GrTBackendProcessorFactory.h"
15 #include "gl/builders/GrGLProgramBuilder.h" 14 #include "gl/builders/GrGLProgramBuilder.h"
16 // For brevity 15 // For brevity
17 typedef GrGLProgramDataManager::UniformHandle UniformHandle; 16 typedef GrGLProgramDataManager::UniformHandle UniformHandle;
18 17
19 static const SkScalar kErrorTol = 0.00001f; 18 static const SkScalar kErrorTol = 0.00001f;
20 static const SkScalar kEdgeErrorTol = 5.f * kErrorTol; 19 static const SkScalar kEdgeErrorTol = 5.f * kErrorTol;
21 20
22 /** 21 /**
23 * We have three general cases for 2pt conical gradients. First we always assume that 22 * We have three general cases for 2pt conical gradients. First we always assume that
24 * the start radius <= end radius. Our first case (kInside_) is when the start c ircle 23 * the start radius <= end radius. Our first case (kInside_) is when the start c ircle
(...skipping 23 matching lines...) Expand all
48 SkScalar diffLen = diff.length(); 47 SkScalar diffLen = diff.length();
49 if (0 != diffLen) { 48 if (0 != diffLen) {
50 SkScalar invDiffLen = SkScalarInvert(diffLen); 49 SkScalar invDiffLen = SkScalarInvert(diffLen);
51 SkMatrix rot; 50 SkMatrix rot;
52 rot.setSinCos(-SkScalarMul(invDiffLen, diff.fY), 51 rot.setSinCos(-SkScalarMul(invDiffLen, diff.fY),
53 SkScalarMul(invDiffLen, diff.fX)); 52 SkScalarMul(invDiffLen, diff.fX));
54 invLMatrix->postConcat(rot); 53 invLMatrix->postConcat(rot);
55 } 54 }
56 } 55 }
57 56
58 class GLEdge2PtConicalEffect;
59
60 class Edge2PtConicalEffect : public GrGradientEffect { 57 class Edge2PtConicalEffect : public GrGradientEffect {
61 public: 58 public:
62 59
63 static GrFragmentProcessor* Create(GrContext* ctx, 60 static GrFragmentProcessor* Create(GrContext* ctx,
64 const SkTwoPointConicalGradient& shader, 61 const SkTwoPointConicalGradient& shader,
65 const SkMatrix& matrix, 62 const SkMatrix& matrix,
66 SkShader::TileMode tm) { 63 SkShader::TileMode tm) {
67 return SkNEW_ARGS(Edge2PtConicalEffect, (ctx, shader, matrix, tm)); 64 return SkNEW_ARGS(Edge2PtConicalEffect, (ctx, shader, matrix, tm));
68 } 65 }
69 66
70 virtual ~Edge2PtConicalEffect() {} 67 virtual ~Edge2PtConicalEffect() {}
71 68
72 static const char* Name() { return "Two-Point Conical Gradient Edge Touching "; } 69 virtual const char* name() const SK_OVERRIDE {
73 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 70 return "Two-Point Conical Gradient Edge Touching";
71 }
72
73 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE;
74
75 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
74 76
75 // The radial gradient parameters can collapse to a linear (instead of quadr atic) equation. 77 // The radial gradient parameters can collapse to a linear (instead of quadr atic) equation.
76 SkScalar center() const { return fCenterX1; } 78 SkScalar center() const { return fCenterX1; }
77 SkScalar diffRadius() const { return fDiffRadius; } 79 SkScalar diffRadius() const { return fDiffRadius; }
78 SkScalar radius() const { return fRadius0; } 80 SkScalar radius() const { return fRadius0; }
79 81
80 typedef GLEdge2PtConicalEffect GLProcessor;
81
82 private: 82 private:
83 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 83 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
84 const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>(); 84 const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>();
85 return (INHERITED::onIsEqual(sBase) && 85 return (INHERITED::onIsEqual(sBase) &&
86 this->fCenterX1 == s.fCenterX1 && 86 this->fCenterX1 == s.fCenterX1 &&
87 this->fRadius0 == s.fRadius0 && 87 this->fRadius0 == s.fRadius0 &&
88 this->fDiffRadius == s.fDiffRadius); 88 this->fDiffRadius == s.fDiffRadius);
89 } 89 }
90 90
91 Edge2PtConicalEffect(GrContext* ctx, 91 Edge2PtConicalEffect(GrContext* ctx,
92 const SkTwoPointConicalGradient& shader, 92 const SkTwoPointConicalGradient& shader,
93 const SkMatrix& matrix, 93 const SkMatrix& matrix,
94 SkShader::TileMode tm) 94 SkShader::TileMode tm)
95 : INHERITED(ctx, shader, matrix, tm), 95 : INHERITED(ctx, shader, matrix, tm),
96 fCenterX1(shader.getCenterX1()), 96 fCenterX1(shader.getCenterX1()),
97 fRadius0(shader.getStartRadius()), 97 fRadius0(shader.getStartRadius()),
98 fDiffRadius(shader.getDiffRadius()){ 98 fDiffRadius(shader.getDiffRadius()){
99 this->initClassID<Edge2PtConicalEffect>();
99 // We should only be calling this shader if we are degenerate case with touching circles 100 // We should only be calling this shader if we are degenerate case with touching circles
100 // When deciding if we are in edge case, we scaled by the end radius for cases when the 101 // When deciding if we are in edge case, we scaled by the end radius for cases when the
101 // start radius was close to zero, otherwise we scaled by the start radi us. In addition 102 // start radius was close to zero, otherwise we scaled by the start radi us. In addition
102 // Our test for the edge case in set_matrix_circle_conical has a higher tolerance so we 103 // Our test for the edge case in set_matrix_circle_conical has a higher tolerance so we
103 // need the sqrt value below 104 // need the sqrt value below
104 SkASSERT(SkScalarAbs(SkScalarAbs(fDiffRadius) - fCenterX1) < 105 SkASSERT(SkScalarAbs(SkScalarAbs(fDiffRadius) - fCenterX1) <
105 (fRadius0 < kErrorTol ? shader.getEndRadius() * kEdgeErrorTol : 106 (fRadius0 < kErrorTol ? shader.getEndRadius() * kEdgeErrorTol :
106 fRadius0 * sqrt(kEdgeErrorTol))); 107 fRadius0 * sqrt(kEdgeErrorTol)));
107 108
108 // We pass the linear part of the quadratic as a varying. 109 // We pass the linear part of the quadratic as a varying.
(...skipping 21 matching lines...) Expand all
130 SkScalar fRadius0; 131 SkScalar fRadius0;
131 SkScalar fDiffRadius; 132 SkScalar fDiffRadius;
132 133
133 // @} 134 // @}
134 135
135 typedef GrGradientEffect INHERITED; 136 typedef GrGradientEffect INHERITED;
136 }; 137 };
137 138
138 class GLEdge2PtConicalEffect : public GrGLGradientEffect { 139 class GLEdge2PtConicalEffect : public GrGLGradientEffect {
139 public: 140 public:
140 GLEdge2PtConicalEffect(const GrBackendProcessorFactory& factory, const GrPro cessor&); 141 GLEdge2PtConicalEffect(const GrProcessor&);
141 virtual ~GLEdge2PtConicalEffect() { } 142 virtual ~GLEdge2PtConicalEffect() { }
142 143
143 virtual void emitCode(GrGLFPBuilder*, 144 virtual void emitCode(GrGLFPBuilder*,
144 const GrFragmentProcessor&, 145 const GrFragmentProcessor&,
145 const char* outputColor, 146 const char* outputColor,
146 const char* inputColor, 147 const char* inputColor,
147 const TransformedCoordsArray&, 148 const TransformedCoordsArray&,
148 const TextureSamplerArray&) SK_OVERRIDE; 149 const TextureSamplerArray&) SK_OVERRIDE;
149 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 150 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
150 151
(...skipping 11 matching lines...) Expand all
162 SkScalar fCachedRadius; 163 SkScalar fCachedRadius;
163 SkScalar fCachedDiffRadius; 164 SkScalar fCachedDiffRadius;
164 165
165 // @} 166 // @}
166 167
167 private: 168 private:
168 typedef GrGLGradientEffect INHERITED; 169 typedef GrGLGradientEffect INHERITED;
169 170
170 }; 171 };
171 172
172 const GrBackendFragmentProcessorFactory& Edge2PtConicalEffect::getFactory() cons t { 173 void Edge2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
173 return GrTBackendFragmentProcessorFactory<Edge2PtConicalEffect>::getInstance (); 174 GrProcessorKeyBuilder* b) const {
175 GLEdge2PtConicalEffect::GenKey(*this, caps, b);
176 }
177
178 GrGLFragmentProcessor* Edge2PtConicalEffect::createGLInstance() const {
179 return SkNEW_ARGS(GLEdge2PtConicalEffect, (*this));
174 } 180 }
175 181
176 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect); 182 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect);
177 183
178 /* 184 /*
179 * All Two point conical gradient test create functions may occasionally create edge case shaders 185 * All Two point conical gradient test create functions may occasionally create edge case shaders
180 */ 186 */
181 GrFragmentProcessor* Edge2PtConicalEffect::TestCreate(SkRandom* random, 187 GrFragmentProcessor* Edge2PtConicalEffect::TestCreate(SkRandom* random,
182 GrContext* context, 188 GrContext* context,
183 const GrDrawTargetCaps&, 189 const GrDrawTargetCaps&,
(...skipping 23 matching lines...) Expand all
207 center 2, radius2, 213 center 2, radius2,
208 colors , stops, colorCount, 214 colors , stops, colorCount,
209 tm)); 215 tm));
210 SkPaint paint; 216 SkPaint paint;
211 GrFragmentProcessor* fp; 217 GrFragmentProcessor* fp;
212 GrColor paintColor; 218 GrColor paintColor;
213 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &fp)); 219 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &fp));
214 return fp; 220 return fp;
215 } 221 }
216 222
217 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendProcessorFactory& factory, 223 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&)
218 const GrProcessor&) 224 : fVSVaryingName(NULL)
219 : INHERITED(factory)
220 , fVSVaryingName(NULL)
221 , fFSVaryingName(NULL) 225 , fFSVaryingName(NULL)
222 , fCachedRadius(-SK_ScalarMax) 226 , fCachedRadius(-SK_ScalarMax)
223 , fCachedDiffRadius(-SK_ScalarMax) {} 227 , fCachedDiffRadius(-SK_ScalarMax) {}
224 228
225 void GLEdge2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 229 void GLEdge2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
226 const GrFragmentProcessor& fp, 230 const GrFragmentProcessor& fp,
227 const char* outputColor, 231 const char* outputColor,
228 const char* inputColor, 232 const char* inputColor,
229 const TransformedCoordsArray& coords, 233 const TransformedCoordsArray& coords,
230 const TextureSamplerArray& samplers) { 234 const TextureSamplerArray& samplers) {
231 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 235 const Edge2PtConicalEffect& ge = fp.cast<Edge2PtConicalEffect>();
232 this->emitUniforms(builder, ge); 236 this->emitUniforms(builder, ge);
233 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit y, 237 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit y,
234 kFloat_GrSLType, "Conical2FSParams", 3) ; 238 kFloat_GrSLType, "Conical2FSParams", 3) ;
235 239
236 SkString cName("c"); 240 SkString cName("c");
237 SkString tName("t"); 241 SkString tName("t");
238 SkString p0; // start radius 242 SkString p0; // start radius
239 SkString p1; // start radius squared 243 SkString p1; // start radius squared
240 SkString p2; // difference in radii (r1 - r0) 244 SkString p2; // difference in radii (r1 - r0)
241 245
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 matrix.postScale(s, s); 365 matrix.postScale(s, s);
362 } 366 }
363 367
364 invLMatrix->postConcat(matrix); 368 invLMatrix->postConcat(matrix);
365 369
366 return conicalType; 370 return conicalType;
367 } 371 }
368 372
369 ////////////////////////////////////////////////////////////////////////////// 373 //////////////////////////////////////////////////////////////////////////////
370 374
371 class GLFocalOutside2PtConicalEffect;
372
373 class FocalOutside2PtConicalEffect : public GrGradientEffect { 375 class FocalOutside2PtConicalEffect : public GrGradientEffect {
374 public: 376 public:
375 377
376 static GrFragmentProcessor* Create(GrContext* ctx, 378 static GrFragmentProcessor* Create(GrContext* ctx,
377 const SkTwoPointConicalGradient& shader, 379 const SkTwoPointConicalGradient& shader,
378 const SkMatrix& matrix, 380 const SkMatrix& matrix,
379 SkShader::TileMode tm, 381 SkShader::TileMode tm,
380 SkScalar focalX) { 382 SkScalar focalX) {
381 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shader, matrix, tm , focalX)); 383 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shader, matrix, tm , focalX));
382 } 384 }
383 385
384 virtual ~FocalOutside2PtConicalEffect() { } 386 virtual ~FocalOutside2PtConicalEffect() { }
385 387
386 static const char* Name() { return "Two-Point Conical Gradient Focal Outside "; } 388 virtual const char* name() const SK_OVERRIDE {
387 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 389 return "Two-Point Conical Gradient Focal Outside";
390 }
391
392 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE;
393
394 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
388 395
389 bool isFlipped() const { return fIsFlipped; } 396 bool isFlipped() const { return fIsFlipped; }
390 SkScalar focal() const { return fFocalX; } 397 SkScalar focal() const { return fFocalX; }
391 398
392 typedef GLFocalOutside2PtConicalEffect GLProcessor;
393
394 private: 399 private:
395 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 400 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
396 const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConica lEffect>(); 401 const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConica lEffect>();
397 return (INHERITED::onIsEqual(sBase) && 402 return (INHERITED::onIsEqual(sBase) &&
398 this->fFocalX == s.fFocalX && 403 this->fFocalX == s.fFocalX &&
399 this->fIsFlipped == s.fIsFlipped); 404 this->fIsFlipped == s.fIsFlipped);
400 } 405 }
401 406
402 FocalOutside2PtConicalEffect(GrContext* ctx, 407 FocalOutside2PtConicalEffect(GrContext* ctx,
403 const SkTwoPointConicalGradient& shader, 408 const SkTwoPointConicalGradient& shader,
404 const SkMatrix& matrix, 409 const SkMatrix& matrix,
405 SkShader::TileMode tm, 410 SkShader::TileMode tm,
406 SkScalar focalX) 411 SkScalar focalX)
407 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX), fIsFlipped(shader.isF lippedGrad()) {} 412 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX), fIsFlipped(shader.isF lippedGrad()) {
413 this->initClassID<FocalOutside2PtConicalEffect>();
414 }
408 415
409 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 416 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
410 417
411 SkScalar fFocalX; 418 SkScalar fFocalX;
412 bool fIsFlipped; 419 bool fIsFlipped;
413 420
414 typedef GrGradientEffect INHERITED; 421 typedef GrGradientEffect INHERITED;
415 }; 422 };
416 423
417 class GLFocalOutside2PtConicalEffect : public GrGLGradientEffect { 424 class GLFocalOutside2PtConicalEffect : public GrGLGradientEffect {
418 public: 425 public:
419 GLFocalOutside2PtConicalEffect(const GrBackendProcessorFactory& factory, con st GrProcessor&); 426 GLFocalOutside2PtConicalEffect(const GrProcessor&);
420 virtual ~GLFocalOutside2PtConicalEffect() { } 427 virtual ~GLFocalOutside2PtConicalEffect() { }
421 428
422 virtual void emitCode(GrGLFPBuilder*, 429 virtual void emitCode(GrGLFPBuilder*,
423 const GrFragmentProcessor&, 430 const GrFragmentProcessor&,
424 const char* outputColor, 431 const char* outputColor,
425 const char* inputColor, 432 const char* inputColor,
426 const TransformedCoordsArray&, 433 const TransformedCoordsArray&,
427 const TextureSamplerArray&) SK_OVERRIDE; 434 const TextureSamplerArray&) SK_OVERRIDE;
428 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 435 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
429 436
(...skipping 12 matching lines...) Expand all
442 449
443 SkScalar fCachedFocal; 450 SkScalar fCachedFocal;
444 451
445 // @} 452 // @}
446 453
447 private: 454 private:
448 typedef GrGLGradientEffect INHERITED; 455 typedef GrGLGradientEffect INHERITED;
449 456
450 }; 457 };
451 458
452 const GrBackendFragmentProcessorFactory& FocalOutside2PtConicalEffect::getFactor y() const { 459 void FocalOutside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
453 return GrTBackendFragmentProcessorFactory<FocalOutside2PtConicalEffect>::get Instance(); 460 GrProcessorKeyBuilder* b) c onst {
461 GLFocalOutside2PtConicalEffect::GenKey(*this, caps, b);
462 }
463
464 GrGLFragmentProcessor* FocalOutside2PtConicalEffect::createGLInstance() const {
465 return SkNEW_ARGS(GLFocalOutside2PtConicalEffect, (*this));
454 } 466 }
455 467
456 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect); 468 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect);
457 469
458 /* 470 /*
459 * All Two point conical gradient test create functions may occasionally create edge case shaders 471 * All Two point conical gradient test create functions may occasionally create edge case shaders
460 */ 472 */
461 GrFragmentProcessor* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random, 473 GrFragmentProcessor* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random,
462 GrContext* context , 474 GrContext* context ,
463 const GrDrawTarget Caps&, 475 const GrDrawTarget Caps&,
(...skipping 20 matching lines...) Expand all
484 center 2, radius2, 496 center 2, radius2,
485 colors , stops, colorCount, 497 colors , stops, colorCount,
486 tm)); 498 tm));
487 SkPaint paint; 499 SkPaint paint;
488 GrFragmentProcessor* effect; 500 GrFragmentProcessor* effect;
489 GrColor paintColor; 501 GrColor paintColor;
490 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &effect)); 502 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &effect));
491 return effect; 503 return effect;
492 } 504 }
493 505
494 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrBackendPr ocessorFactory& factory, 506 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrProcessor & processor)
495 const GrProcessor & processor) 507 : fVSVaryingName(NULL)
496 : INHERITED(factory)
497 , fVSVaryingName(NULL)
498 , fFSVaryingName(NULL) 508 , fFSVaryingName(NULL)
499 , fCachedFocal(SK_ScalarMax) { 509 , fCachedFocal(SK_ScalarMax) {
500 const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtCon icalEffect>(); 510 const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtCon icalEffect>();
501 fIsFlipped = data.isFlipped(); 511 fIsFlipped = data.isFlipped();
502 } 512 }
503 513
504 void GLFocalOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 514 void GLFocalOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
505 const GrFragmentProcessor& fp, 515 const GrFragmentProcessor& fp,
506 const char* outputColor, 516 const char* outputColor,
507 const char* inputColor, 517 const char* inputColor,
508 const TransformedCoordsArray& coor ds, 518 const TransformedCoordsArray& coor ds,
509 const TextureSamplerArray& sampler s) { 519 const TextureSamplerArray& sampler s) {
510 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 520 const FocalOutside2PtConicalEffect& ge = fp.cast<FocalOutside2PtConicalEffec t>();
511 this->emitUniforms(builder, ge); 521 this->emitUniforms(builder, ge);
512 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit y, 522 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit y,
513 kFloat_GrSLType, "Conical2FSParams", 2) ; 523 kFloat_GrSLType, "Conical2FSParams", 2) ;
514 SkString tName("t"); 524 SkString tName("t");
515 SkString p0; // focalX 525 SkString p0; // focalX
516 SkString p1; // 1 - focalX * focalX 526 SkString p1; // 1 - focalX * focalX
517 527
518 builder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); 528 builder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0);
519 builder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); 529 builder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1);
520 530
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 static GrFragmentProcessor* Create(GrContext* ctx, 596 static GrFragmentProcessor* Create(GrContext* ctx,
587 const SkTwoPointConicalGradient& shader, 597 const SkTwoPointConicalGradient& shader,
588 const SkMatrix& matrix, 598 const SkMatrix& matrix,
589 SkShader::TileMode tm, 599 SkShader::TileMode tm,
590 SkScalar focalX) { 600 SkScalar focalX) {
591 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shader, matrix, tm, focalX)); 601 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shader, matrix, tm, focalX));
592 } 602 }
593 603
594 virtual ~FocalInside2PtConicalEffect() {} 604 virtual ~FocalInside2PtConicalEffect() {}
595 605
596 static const char* Name() { return "Two-Point Conical Gradient Focal Inside" ; } 606 virtual const char* name() const SK_OVERRIDE {
597 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 607 return "Two-Point Conical Gradient Focal Inside";
608 }
609
610 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE;
611
612 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
598 613
599 SkScalar focal() const { return fFocalX; } 614 SkScalar focal() const { return fFocalX; }
600 615
601 typedef GLFocalInside2PtConicalEffect GLProcessor; 616 typedef GLFocalInside2PtConicalEffect GLProcessor;
602 617
603 private: 618 private:
604 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 619 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
605 const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalE ffect>(); 620 const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalE ffect>();
606 return (INHERITED::onIsEqual(sBase) && 621 return (INHERITED::onIsEqual(sBase) &&
607 this->fFocalX == s.fFocalX); 622 this->fFocalX == s.fFocalX);
608 } 623 }
609 624
610 FocalInside2PtConicalEffect(GrContext* ctx, 625 FocalInside2PtConicalEffect(GrContext* ctx,
611 const SkTwoPointConicalGradient& shader, 626 const SkTwoPointConicalGradient& shader,
612 const SkMatrix& matrix, 627 const SkMatrix& matrix,
613 SkShader::TileMode tm, 628 SkShader::TileMode tm,
614 SkScalar focalX) 629 SkScalar focalX)
615 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX) {} 630 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX) {
631 this->initClassID<FocalInside2PtConicalEffect>();
632 }
616 633
617 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 634 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
618 635
619 SkScalar fFocalX; 636 SkScalar fFocalX;
620 637
621 typedef GrGradientEffect INHERITED; 638 typedef GrGradientEffect INHERITED;
622 }; 639 };
623 640
624 class GLFocalInside2PtConicalEffect : public GrGLGradientEffect { 641 class GLFocalInside2PtConicalEffect : public GrGLGradientEffect {
625 public: 642 public:
626 GLFocalInside2PtConicalEffect(const GrBackendProcessorFactory& factory, cons t GrProcessor&); 643 GLFocalInside2PtConicalEffect(const GrProcessor&);
627 virtual ~GLFocalInside2PtConicalEffect() {} 644 virtual ~GLFocalInside2PtConicalEffect() {}
628 645
629 virtual void emitCode(GrGLFPBuilder*, 646 virtual void emitCode(GrGLFPBuilder*,
630 const GrFragmentProcessor&, 647 const GrFragmentProcessor&,
631 const char* outputColor, 648 const char* outputColor,
632 const char* inputColor, 649 const char* inputColor,
633 const TransformedCoordsArray&, 650 const TransformedCoordsArray&,
634 const TextureSamplerArray&) SK_OVERRIDE; 651 const TextureSamplerArray&) SK_OVERRIDE;
635 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 652 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
636 653
(...skipping 10 matching lines...) Expand all
647 664
648 SkScalar fCachedFocal; 665 SkScalar fCachedFocal;
649 666
650 // @} 667 // @}
651 668
652 private: 669 private:
653 typedef GrGLGradientEffect INHERITED; 670 typedef GrGLGradientEffect INHERITED;
654 671
655 }; 672 };
656 673
657 const GrBackendFragmentProcessorFactory& FocalInside2PtConicalEffect::getFactory () const { 674 void FocalInside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
658 return GrTBackendFragmentProcessorFactory<FocalInside2PtConicalEffect>::getI nstance(); 675 GrProcessorKeyBuilder* b) const {
676 GLFocalInside2PtConicalEffect::GenKey(*this, caps, b);
677 }
678
679 GrGLFragmentProcessor* FocalInside2PtConicalEffect::createGLInstance() const {
680 return SkNEW_ARGS(GLFocalInside2PtConicalEffect, (*this));
659 } 681 }
660 682
661 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect); 683 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect);
662 684
663 /* 685 /*
664 * All Two point conical gradient test create functions may occasionally create edge case shaders 686 * All Two point conical gradient test create functions may occasionally create edge case shaders
665 */ 687 */
666 GrFragmentProcessor* FocalInside2PtConicalEffect::TestCreate(SkRandom* random, 688 GrFragmentProcessor* FocalInside2PtConicalEffect::TestCreate(SkRandom* random,
667 GrContext* context, 689 GrContext* context,
668 const GrDrawTargetC aps&, 690 const GrDrawTargetC aps&,
(...skipping 22 matching lines...) Expand all
691 center 2, radius2, 713 center 2, radius2,
692 colors , stops, colorCount, 714 colors , stops, colorCount,
693 tm)); 715 tm));
694 SkPaint paint; 716 SkPaint paint;
695 GrColor paintColor; 717 GrColor paintColor;
696 GrFragmentProcessor* fp; 718 GrFragmentProcessor* fp;
697 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &fp)); 719 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &fp));
698 return fp; 720 return fp;
699 } 721 }
700 722
701 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendProc essorFactory& factory, 723 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&)
702 const GrProcessor&) 724 : fVSVaryingName(NULL)
703 : INHERITED(factory)
704 , fVSVaryingName(NULL)
705 , fFSVaryingName(NULL) 725 , fFSVaryingName(NULL)
706 , fCachedFocal(SK_ScalarMax) {} 726 , fCachedFocal(SK_ScalarMax) {}
707 727
708 void GLFocalInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 728 void GLFocalInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
709 const GrFragmentProcessor& fp, 729 const GrFragmentProcessor& fp,
710 const char* outputColor, 730 const char* outputColor,
711 const char* inputColor, 731 const char* inputColor,
712 const TransformedCoordsArray& coord s, 732 const TransformedCoordsArray& coord s,
713 const TextureSamplerArray& samplers ) { 733 const TextureSamplerArray& samplers ) {
714 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 734 const FocalInside2PtConicalEffect& ge = fp.cast<FocalInside2PtConicalEffect> ();
715 this->emitUniforms(builder, ge); 735 this->emitUniforms(builder, ge);
716 fFocalUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 736 fFocalUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
717 kFloat_GrSLType, "Conical2FSParams"); 737 kFloat_GrSLType, "Conical2FSParams");
718 SkString tName("t"); 738 SkString tName("t");
719 739
720 // this is the distance along x-axis from the end center to focal point in 740 // this is the distance along x-axis from the end center to focal point in
721 // transformed coordinates 741 // transformed coordinates
722 GrGLShaderVar focal = builder->getUniformVariable(fFocalUni); 742 GrGLShaderVar focal = builder->getUniformVariable(fFocalUni);
723 743
724 // if we have a vec3 from being in perspective, convert it to a vec2 first 744 // if we have a vec3 from being in perspective, convert it to a vec2 first
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 info->fB = B; 827 info->fB = B;
808 info->fC = C; 828 info->fC = C;
809 829
810 // if A ends up being negative, the start circle is contained completely ins ide the end cirlce 830 // if A ends up being negative, the start circle is contained completely ins ide the end cirlce
811 if (A < 0.f) { 831 if (A < 0.f) {
812 return kInside_ConicalType; 832 return kInside_ConicalType;
813 } 833 }
814 return kOutside_ConicalType; 834 return kOutside_ConicalType;
815 } 835 }
816 836
817 class GLCircleInside2PtConicalEffect;
818
819 class CircleInside2PtConicalEffect : public GrGradientEffect { 837 class CircleInside2PtConicalEffect : public GrGradientEffect {
820 public: 838 public:
821 839
822 static GrFragmentProcessor* Create(GrContext* ctx, 840 static GrFragmentProcessor* Create(GrContext* ctx,
823 const SkTwoPointConicalGradient& shader, 841 const SkTwoPointConicalGradient& shader,
824 const SkMatrix& matrix, 842 const SkMatrix& matrix,
825 SkShader::TileMode tm, 843 SkShader::TileMode tm,
826 const CircleConicalInfo& info) { 844 const CircleConicalInfo& info) {
827 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shader, matrix, tm , info)); 845 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shader, matrix, tm , info));
828 } 846 }
829 847
830 virtual ~CircleInside2PtConicalEffect() {} 848 virtual ~CircleInside2PtConicalEffect() {}
831 849
832 static const char* Name() { return "Two-Point Conical Gradient Inside"; } 850 virtual const char* name() const SK_OVERRIDE { return "Two-Point Conical Gra dient Inside"; }
833 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 851
852 virtual void getGLProcessorKey(const GrGLCaps& caps,
853 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
854
855 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
834 856
835 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } 857 SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
836 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } 858 SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
837 SkScalar A() const { return fInfo.fA; } 859 SkScalar A() const { return fInfo.fA; }
838 SkScalar B() const { return fInfo.fB; } 860 SkScalar B() const { return fInfo.fB; }
839 SkScalar C() const { return fInfo.fC; } 861 SkScalar C() const { return fInfo.fC; }
840 862
841 typedef GLCircleInside2PtConicalEffect GLProcessor;
842
843 private: 863 private:
844 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 864 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
845 const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConica lEffect>(); 865 const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConica lEffect>();
846 return (INHERITED::onIsEqual(sBase) && 866 return (INHERITED::onIsEqual(sBase) &&
847 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && 867 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd &&
848 this->fInfo.fA == s.fInfo.fA && 868 this->fInfo.fA == s.fInfo.fA &&
849 this->fInfo.fB == s.fInfo.fB && 869 this->fInfo.fB == s.fInfo.fB &&
850 this->fInfo.fC == s.fInfo.fC); 870 this->fInfo.fC == s.fInfo.fC);
851 } 871 }
852 872
853 CircleInside2PtConicalEffect(GrContext* ctx, 873 CircleInside2PtConicalEffect(GrContext* ctx,
854 const SkTwoPointConicalGradient& shader, 874 const SkTwoPointConicalGradient& shader,
855 const SkMatrix& matrix, 875 const SkMatrix& matrix,
856 SkShader::TileMode tm, 876 SkShader::TileMode tm,
857 const CircleConicalInfo& info) 877 const CircleConicalInfo& info)
858 : INHERITED(ctx, shader, matrix, tm), fInfo(info) {} 878 : INHERITED(ctx, shader, matrix, tm), fInfo(info) {
879 this->initClassID<CircleInside2PtConicalEffect>();
880 }
859 881
860 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 882 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
861 883
862 const CircleConicalInfo fInfo; 884 const CircleConicalInfo fInfo;
863 885
864 typedef GrGradientEffect INHERITED; 886 typedef GrGradientEffect INHERITED;
865 }; 887 };
866 888
867 class GLCircleInside2PtConicalEffect : public GrGLGradientEffect { 889 class GLCircleInside2PtConicalEffect : public GrGLGradientEffect {
868 public: 890 public:
869 GLCircleInside2PtConicalEffect(const GrBackendProcessorFactory& factory, con st GrProcessor&); 891 GLCircleInside2PtConicalEffect(const GrProcessor&);
870 virtual ~GLCircleInside2PtConicalEffect() {} 892 virtual ~GLCircleInside2PtConicalEffect() {}
871 893
872 virtual void emitCode(GrGLFPBuilder*, 894 virtual void emitCode(GrGLFPBuilder*,
873 const GrFragmentProcessor&, 895 const GrFragmentProcessor&,
874 const char* outputColor, 896 const char* outputColor,
875 const char* inputColor, 897 const char* inputColor,
876 const TransformedCoordsArray&, 898 const TransformedCoordsArray&,
877 const TextureSamplerArray&) SK_OVERRIDE; 899 const TextureSamplerArray&) SK_OVERRIDE;
878 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 900 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
879 901
(...skipping 15 matching lines...) Expand all
895 SkScalar fCachedB; 917 SkScalar fCachedB;
896 SkScalar fCachedC; 918 SkScalar fCachedC;
897 919
898 // @} 920 // @}
899 921
900 private: 922 private:
901 typedef GrGLGradientEffect INHERITED; 923 typedef GrGLGradientEffect INHERITED;
902 924
903 }; 925 };
904 926
905 const GrBackendFragmentProcessorFactory& CircleInside2PtConicalEffect::getFactor y() const { 927 void CircleInside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
906 return GrTBackendFragmentProcessorFactory<CircleInside2PtConicalEffect>::get Instance(); 928 GrProcessorKeyBuilder* b) c onst {
929 GLCircleInside2PtConicalEffect::GenKey(*this, caps, b);
930 }
931
932 GrGLFragmentProcessor* CircleInside2PtConicalEffect::createGLInstance() const {
933 return SkNEW_ARGS(GLCircleInside2PtConicalEffect, (*this));
907 } 934 }
908 935
909 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect); 936 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect);
910 937
911 /* 938 /*
912 * All Two point conical gradient test create functions may occasionally create edge case shaders 939 * All Two point conical gradient test create functions may occasionally create edge case shaders
913 */ 940 */
914 GrFragmentProcessor* CircleInside2PtConicalEffect::TestCreate(SkRandom* random, 941 GrFragmentProcessor* CircleInside2PtConicalEffect::TestCreate(SkRandom* random,
915 GrContext* context , 942 GrContext* context ,
916 const GrDrawTarget Caps&, 943 const GrDrawTarget Caps&,
(...skipping 21 matching lines...) Expand all
938 center 2, radius2, 965 center 2, radius2,
939 colors , stops, colorCount, 966 colors , stops, colorCount,
940 tm)); 967 tm));
941 SkPaint paint; 968 SkPaint paint;
942 GrColor paintColor; 969 GrColor paintColor;
943 GrFragmentProcessor* processor; 970 GrFragmentProcessor* processor;
944 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &processor)); 971 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &processor));
945 return processor; 972 return processor;
946 } 973 }
947 974
948 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrBackendPr ocessorFactory& factory, 975 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrProcessor & processor)
949 const GrProcessor & processor) 976 : fVSVaryingName(NULL)
950 : INHERITED(factory)
951 , fVSVaryingName(NULL)
952 , fFSVaryingName(NULL) 977 , fFSVaryingName(NULL)
953 , fCachedCenterX(SK_ScalarMax) 978 , fCachedCenterX(SK_ScalarMax)
954 , fCachedCenterY(SK_ScalarMax) 979 , fCachedCenterY(SK_ScalarMax)
955 , fCachedA(SK_ScalarMax) 980 , fCachedA(SK_ScalarMax)
956 , fCachedB(SK_ScalarMax) 981 , fCachedB(SK_ScalarMax)
957 , fCachedC(SK_ScalarMax) {} 982 , fCachedC(SK_ScalarMax) {}
958 983
959 void GLCircleInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 984 void GLCircleInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
960 const GrFragmentProcessor& fp, 985 const GrFragmentProcessor& fp,
961 const char* outputColor, 986 const char* outputColor,
962 const char* inputColor, 987 const char* inputColor,
963 const TransformedCoordsArray& coor ds, 988 const TransformedCoordsArray& coor ds,
964 const TextureSamplerArray& sampler s) { 989 const TextureSamplerArray& sampler s) {
965 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 990 const CircleInside2PtConicalEffect& ge = fp.cast<CircleInside2PtConicalEffec t>();
966 this->emitUniforms(builder, ge); 991 this->emitUniforms(builder, ge);
967 fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 992 fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
968 kVec2f_GrSLType, "Conical2FSCenter"); 993 kVec2f_GrSLType, "Conical2FSCenter");
969 fParamUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 994 fParamUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
970 kVec3f_GrSLType, "Conical2FSParams"); 995 kVec3f_GrSLType, "Conical2FSParams");
971 SkString tName("t"); 996 SkString tName("t");
972 997
973 GrGLShaderVar center = builder->getUniformVariable(fCenterUni); 998 GrGLShaderVar center = builder->getUniformVariable(fCenterUni);
974 // params.x = A 999 // params.x = A
975 // params.y = B 1000 // params.y = B
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 } 1047 }
1023 } 1048 }
1024 1049
1025 void GLCircleInside2PtConicalEffect::GenKey(const GrProcessor& processor, 1050 void GLCircleInside2PtConicalEffect::GenKey(const GrProcessor& processor,
1026 const GrGLCaps&, GrProcessorKeyBuild er* b) { 1051 const GrGLCaps&, GrProcessorKeyBuild er* b) {
1027 b->add32(GenBaseGradientKey(processor)); 1052 b->add32(GenBaseGradientKey(processor));
1028 } 1053 }
1029 1054
1030 ////////////////////////////////////////////////////////////////////////////// 1055 //////////////////////////////////////////////////////////////////////////////
1031 1056
1032 class GLCircleOutside2PtConicalEffect;
1033
1034 class CircleOutside2PtConicalEffect : public GrGradientEffect { 1057 class CircleOutside2PtConicalEffect : public GrGradientEffect {
1035 public: 1058 public:
1036 1059
1037 static GrFragmentProcessor* Create(GrContext* ctx, 1060 static GrFragmentProcessor* Create(GrContext* ctx,
1038 const SkTwoPointConicalGradient& shader, 1061 const SkTwoPointConicalGradient& shader,
1039 const SkMatrix& matrix, 1062 const SkMatrix& matrix,
1040 SkShader::TileMode tm, 1063 SkShader::TileMode tm,
1041 const CircleConicalInfo& info) { 1064 const CircleConicalInfo& info) {
1042 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shader, matrix, t m, info)); 1065 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shader, matrix, t m, info));
1043 } 1066 }
1044 1067
1045 virtual ~CircleOutside2PtConicalEffect() {} 1068 virtual ~CircleOutside2PtConicalEffect() {}
1046 1069
1047 static const char* Name() { return "Two-Point Conical Gradient Outside"; } 1070 virtual const char* name() const SK_OVERRIDE { return "Two-Point Conical Gra dient Outside"; }
1048 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 1071
1072 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE;
1073
1074 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
1049 1075
1050 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } 1076 SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
1051 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } 1077 SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
1052 SkScalar A() const { return fInfo.fA; } 1078 SkScalar A() const { return fInfo.fA; }
1053 SkScalar B() const { return fInfo.fB; } 1079 SkScalar B() const { return fInfo.fB; }
1054 SkScalar C() const { return fInfo.fC; } 1080 SkScalar C() const { return fInfo.fC; }
1055 SkScalar tLimit() const { return fTLimit; } 1081 SkScalar tLimit() const { return fTLimit; }
1056 bool isFlipped() const { return fIsFlipped; } 1082 bool isFlipped() const { return fIsFlipped; }
1057 1083
1058 typedef GLCircleOutside2PtConicalEffect GLProcessor;
1059
1060 private: 1084 private:
1061 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 1085 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
1062 const CircleOutside2PtConicalEffect& s = sBase.cast<CircleOutside2PtConi calEffect>(); 1086 const CircleOutside2PtConicalEffect& s = sBase.cast<CircleOutside2PtConi calEffect>();
1063 return (INHERITED::onIsEqual(sBase) && 1087 return (INHERITED::onIsEqual(sBase) &&
1064 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && 1088 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd &&
1065 this->fInfo.fA == s.fInfo.fA && 1089 this->fInfo.fA == s.fInfo.fA &&
1066 this->fInfo.fB == s.fInfo.fB && 1090 this->fInfo.fB == s.fInfo.fB &&
1067 this->fInfo.fC == s.fInfo.fC && 1091 this->fInfo.fC == s.fInfo.fC &&
1068 this->fTLimit == s.fTLimit && 1092 this->fTLimit == s.fTLimit &&
1069 this->fIsFlipped == s.fIsFlipped); 1093 this->fIsFlipped == s.fIsFlipped);
1070 } 1094 }
1071 1095
1072 CircleOutside2PtConicalEffect(GrContext* ctx, 1096 CircleOutside2PtConicalEffect(GrContext* ctx,
1073 const SkTwoPointConicalGradient& shader, 1097 const SkTwoPointConicalGradient& shader,
1074 const SkMatrix& matrix, 1098 const SkMatrix& matrix,
1075 SkShader::TileMode tm, 1099 SkShader::TileMode tm,
1076 const CircleConicalInfo& info) 1100 const CircleConicalInfo& info)
1077 : INHERITED(ctx, shader, matrix, tm), fInfo(info) { 1101 : INHERITED(ctx, shader, matrix, tm), fInfo(info) {
1102 this->initClassID<CircleOutside2PtConicalEffect>();
1078 if (shader.getStartRadius() != shader.getEndRadius()) { 1103 if (shader.getStartRadius() != shader.getEndRadius()) {
1079 fTLimit = SkScalarDiv(shader.getStartRadius(), 1104 fTLimit = SkScalarDiv(shader.getStartRadius(),
1080 (shader.getStartRadius() - shader.getEndRadius ())); 1105 (shader.getStartRadius() - shader.getEndRadius ()));
1081 } else { 1106 } else {
1082 fTLimit = SK_ScalarMin; 1107 fTLimit = SK_ScalarMin;
1083 } 1108 }
1084 1109
1085 fIsFlipped = shader.isFlippedGrad(); 1110 fIsFlipped = shader.isFlippedGrad();
1086 } 1111 }
1087 1112
1088 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 1113 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
1089 1114
1090 const CircleConicalInfo fInfo; 1115 const CircleConicalInfo fInfo;
1091 SkScalar fTLimit; 1116 SkScalar fTLimit;
1092 bool fIsFlipped; 1117 bool fIsFlipped;
1093 1118
1094 typedef GrGradientEffect INHERITED; 1119 typedef GrGradientEffect INHERITED;
1095 }; 1120 };
1096 1121
1097 class GLCircleOutside2PtConicalEffect : public GrGLGradientEffect { 1122 class GLCircleOutside2PtConicalEffect : public GrGLGradientEffect {
1098 public: 1123 public:
1099 GLCircleOutside2PtConicalEffect(const GrBackendProcessorFactory&, const GrPr ocessor&); 1124 GLCircleOutside2PtConicalEffect(const GrProcessor&);
1100 virtual ~GLCircleOutside2PtConicalEffect() {} 1125 virtual ~GLCircleOutside2PtConicalEffect() {}
1101 1126
1102 virtual void emitCode(GrGLFPBuilder*, 1127 virtual void emitCode(GrGLFPBuilder*,
1103 const GrFragmentProcessor&, 1128 const GrFragmentProcessor&,
1104 const char* outputColor, 1129 const char* outputColor,
1105 const char* inputColor, 1130 const char* inputColor,
1106 const TransformedCoordsArray&, 1131 const TransformedCoordsArray&,
1107 const TextureSamplerArray&) SK_OVERRIDE; 1132 const TextureSamplerArray&) SK_OVERRIDE;
1108 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 1133 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
1109 1134
(...skipping 18 matching lines...) Expand all
1128 SkScalar fCachedC; 1153 SkScalar fCachedC;
1129 SkScalar fCachedTLimit; 1154 SkScalar fCachedTLimit;
1130 1155
1131 // @} 1156 // @}
1132 1157
1133 private: 1158 private:
1134 typedef GrGLGradientEffect INHERITED; 1159 typedef GrGLGradientEffect INHERITED;
1135 1160
1136 }; 1161 };
1137 1162
1138 const GrBackendFragmentProcessorFactory& CircleOutside2PtConicalEffect::getFacto ry() const { 1163 void CircleOutside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
1139 return GrTBackendFragmentProcessorFactory<CircleOutside2PtConicalEffect>::ge tInstance(); 1164 GrProcessorKeyBuilder* b) const {
1165 GLCircleOutside2PtConicalEffect::GenKey(*this, caps, b);
1166 }
1167
1168 GrGLFragmentProcessor* CircleOutside2PtConicalEffect::createGLInstance() const {
1169 return SkNEW_ARGS(GLCircleOutside2PtConicalEffect, (*this));
1140 } 1170 }
1141 1171
1142 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect); 1172 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect);
1143 1173
1144 /* 1174 /*
1145 * All Two point conical gradient test create functions may occasionally create edge case shaders 1175 * All Two point conical gradient test create functions may occasionally create edge case shaders
1146 */ 1176 */
1147 GrFragmentProcessor* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random, 1177 GrFragmentProcessor* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random,
1148 GrContext* contex t, 1178 GrContext* contex t,
1149 const GrDrawTarge tCaps&, 1179 const GrDrawTarge tCaps&,
(...skipping 22 matching lines...) Expand all
1172 center 2, radius2, 1202 center 2, radius2,
1173 colors , stops, colorCount, 1203 colors , stops, colorCount,
1174 tm)); 1204 tm));
1175 SkPaint paint; 1205 SkPaint paint;
1176 GrColor paintColor; 1206 GrColor paintColor;
1177 GrFragmentProcessor* processor; 1207 GrFragmentProcessor* processor;
1178 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &processor)); 1208 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &processor));
1179 return processor; 1209 return processor;
1180 } 1210 }
1181 1211
1182 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrBackend ProcessorFactory& factory, 1212 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrProcess or& processor)
1183 const GrProcess or& processor) 1213 : fVSVaryingName(NULL)
1184 : INHERITED(factory)
1185 , fVSVaryingName(NULL)
1186 , fFSVaryingName(NULL) 1214 , fFSVaryingName(NULL)
1187 , fCachedCenterX(SK_ScalarMax) 1215 , fCachedCenterX(SK_ScalarMax)
1188 , fCachedCenterY(SK_ScalarMax) 1216 , fCachedCenterY(SK_ScalarMax)
1189 , fCachedA(SK_ScalarMax) 1217 , fCachedA(SK_ScalarMax)
1190 , fCachedB(SK_ScalarMax) 1218 , fCachedB(SK_ScalarMax)
1191 , fCachedC(SK_ScalarMax) 1219 , fCachedC(SK_ScalarMax)
1192 , fCachedTLimit(SK_ScalarMax) { 1220 , fCachedTLimit(SK_ScalarMax) {
1193 const CircleOutside2PtConicalEffect& data = processor.cast<CircleOutside2PtC onicalEffect>(); 1221 const CircleOutside2PtConicalEffect& data = processor.cast<CircleOutside2PtC onicalEffect>();
1194 fIsFlipped = data.isFlipped(); 1222 fIsFlipped = data.isFlipped();
1195 } 1223 }
1196 1224
1197 void GLCircleOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 1225 void GLCircleOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
1198 const GrFragmentProcessor& fp, 1226 const GrFragmentProcessor& fp,
1199 const char* outputColor, 1227 const char* outputColor,
1200 const char* inputColor, 1228 const char* inputColor,
1201 const TransformedCoordsArray& coo rds, 1229 const TransformedCoordsArray& coo rds,
1202 const TextureSamplerArray& sample rs) { 1230 const TextureSamplerArray& sample rs) {
1203 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 1231 const CircleOutside2PtConicalEffect& ge = fp.cast<CircleOutside2PtConicalEff ect>();
1204 this->emitUniforms(builder, ge); 1232 this->emitUniforms(builder, ge);
1205 fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1233 fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1206 kVec2f_GrSLType, "Conical2FSCenter"); 1234 kVec2f_GrSLType, "Conical2FSCenter");
1207 fParamUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1235 fParamUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1208 kVec4f_GrSLType, "Conical2FSParams"); 1236 kVec4f_GrSLType, "Conical2FSParams");
1209 SkString tName("t"); 1237 SkString tName("t");
1210 1238
1211 GrGLShaderVar center = builder->getUniformVariable(fCenterUni); 1239 GrGLShaderVar center = builder->getUniformVariable(fCenterUni);
1212 // params.x = A 1240 // params.x = A
1213 // params.y = B 1241 // params.y = B
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf o); 1353 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf o);
1326 } else if (type == kEdge_ConicalType) { 1354 } else if (type == kEdge_ConicalType) {
1327 set_matrix_edge_conical(shader, &matrix); 1355 set_matrix_edge_conical(shader, &matrix);
1328 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); 1356 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm);
1329 } else { 1357 } else {
1330 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in fo); 1358 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in fo);
1331 } 1359 }
1332 } 1360 }
1333 1361
1334 #endif 1362 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkSweepGradient.cpp ('k') | src/effects/gradients/SkTwoPointRadialGradient.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698