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

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: cleanup 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;
76
77 virtual uint32_t classID() const {
78 static uint32_t id = GenClassID();
79 return id;
80 }
74 81
75 // The radial gradient parameters can collapse to a linear (instead of quadr atic) equation. 82 // The radial gradient parameters can collapse to a linear (instead of quadr atic) equation.
76 SkScalar center() const { return fCenterX1; } 83 SkScalar center() const { return fCenterX1; }
77 SkScalar diffRadius() const { return fDiffRadius; } 84 SkScalar diffRadius() const { return fDiffRadius; }
78 SkScalar radius() const { return fRadius0; } 85 SkScalar radius() const { return fRadius0; }
79 86
80 typedef GLEdge2PtConicalEffect GLProcessor;
81
82 private: 87 private:
83 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 88 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
84 const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>(); 89 const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>();
85 return (INHERITED::onIsEqual(sBase) && 90 return (INHERITED::onIsEqual(sBase) &&
86 this->fCenterX1 == s.fCenterX1 && 91 this->fCenterX1 == s.fCenterX1 &&
87 this->fRadius0 == s.fRadius0 && 92 this->fRadius0 == s.fRadius0 &&
88 this->fDiffRadius == s.fDiffRadius); 93 this->fDiffRadius == s.fDiffRadius);
89 } 94 }
90 95
91 Edge2PtConicalEffect(GrContext* ctx, 96 Edge2PtConicalEffect(GrContext* ctx,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 SkScalar fRadius0; 135 SkScalar fRadius0;
131 SkScalar fDiffRadius; 136 SkScalar fDiffRadius;
132 137
133 // @} 138 // @}
134 139
135 typedef GrGradientEffect INHERITED; 140 typedef GrGradientEffect INHERITED;
136 }; 141 };
137 142
138 class GLEdge2PtConicalEffect : public GrGLGradientEffect { 143 class GLEdge2PtConicalEffect : public GrGLGradientEffect {
139 public: 144 public:
140 GLEdge2PtConicalEffect(const GrBackendProcessorFactory& factory, const GrPro cessor&); 145 GLEdge2PtConicalEffect(const GrProcessor&);
141 virtual ~GLEdge2PtConicalEffect() { } 146 virtual ~GLEdge2PtConicalEffect() { }
142 147
143 virtual void emitCode(GrGLFPBuilder*, 148 virtual void emitCode(GrGLFPBuilder*,
144 const GrFragmentProcessor&, 149 const GrFragmentProcessor&,
145 const char* outputColor, 150 const char* outputColor,
146 const char* inputColor, 151 const char* inputColor,
147 const TransformedCoordsArray&, 152 const TransformedCoordsArray&,
148 const TextureSamplerArray&) SK_OVERRIDE; 153 const TextureSamplerArray&) SK_OVERRIDE;
149 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 154 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
150 155
(...skipping 11 matching lines...) Expand all
162 SkScalar fCachedRadius; 167 SkScalar fCachedRadius;
163 SkScalar fCachedDiffRadius; 168 SkScalar fCachedDiffRadius;
164 169
165 // @} 170 // @}
166 171
167 private: 172 private:
168 typedef GrGLGradientEffect INHERITED; 173 typedef GrGLGradientEffect INHERITED;
169 174
170 }; 175 };
171 176
172 const GrBackendFragmentProcessorFactory& Edge2PtConicalEffect::getFactory() cons t { 177 void Edge2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
173 return GrTBackendFragmentProcessorFactory<Edge2PtConicalEffect>::getInstance (); 178 GrProcessorKeyBuilder* b) const {
179 GLEdge2PtConicalEffect::GenKey(*this, caps, b);
180 }
181
182 GrGLFragmentProcessor* Edge2PtConicalEffect::createGLInstance() const {
183 return SkNEW_ARGS(GLEdge2PtConicalEffect, (*this));
174 } 184 }
175 185
176 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect); 186 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect);
177 187
178 /* 188 /*
179 * All Two point conical gradient test create functions may occasionally create edge case shaders 189 * All Two point conical gradient test create functions may occasionally create edge case shaders
180 */ 190 */
181 GrFragmentProcessor* Edge2PtConicalEffect::TestCreate(SkRandom* random, 191 GrFragmentProcessor* Edge2PtConicalEffect::TestCreate(SkRandom* random,
182 GrContext* context, 192 GrContext* context,
183 const GrDrawTargetCaps&, 193 const GrDrawTargetCaps&,
(...skipping 23 matching lines...) Expand all
207 center 2, radius2, 217 center 2, radius2,
208 colors , stops, colorCount, 218 colors , stops, colorCount,
209 tm)); 219 tm));
210 SkPaint paint; 220 SkPaint paint;
211 GrFragmentProcessor* fp; 221 GrFragmentProcessor* fp;
212 GrColor paintColor; 222 GrColor paintColor;
213 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &fp)); 223 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &fp));
214 return fp; 224 return fp;
215 } 225 }
216 226
217 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendProcessorFactory& factory, 227 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&)
218 const GrProcessor&) 228 : fVSVaryingName(NULL)
219 : INHERITED(factory)
220 , fVSVaryingName(NULL)
221 , fFSVaryingName(NULL) 229 , fFSVaryingName(NULL)
222 , fCachedRadius(-SK_ScalarMax) 230 , fCachedRadius(-SK_ScalarMax)
223 , fCachedDiffRadius(-SK_ScalarMax) {} 231 , fCachedDiffRadius(-SK_ScalarMax) {}
224 232
225 void GLEdge2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 233 void GLEdge2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
226 const GrFragmentProcessor& fp, 234 const GrFragmentProcessor& fp,
227 const char* outputColor, 235 const char* outputColor,
228 const char* inputColor, 236 const char* inputColor,
229 const TransformedCoordsArray& coords, 237 const TransformedCoordsArray& coords,
230 const TextureSamplerArray& samplers) { 238 const TextureSamplerArray& samplers) {
231 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 239 const Edge2PtConicalEffect& ge = fp.cast<Edge2PtConicalEffect>();
232 this->emitUniforms(builder, ge); 240 this->emitUniforms(builder, ge);
233 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit y, 241 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit y,
234 kFloat_GrSLType, "Conical2FSParams", 3) ; 242 kFloat_GrSLType, "Conical2FSParams", 3) ;
235 243
236 SkString cName("c"); 244 SkString cName("c");
237 SkString tName("t"); 245 SkString tName("t");
238 SkString p0; // start radius 246 SkString p0; // start radius
239 SkString p1; // start radius squared 247 SkString p1; // start radius squared
240 SkString p2; // difference in radii (r1 - r0) 248 SkString p2; // difference in radii (r1 - r0)
241 249
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 matrix.postScale(s, s); 369 matrix.postScale(s, s);
362 } 370 }
363 371
364 invLMatrix->postConcat(matrix); 372 invLMatrix->postConcat(matrix);
365 373
366 return conicalType; 374 return conicalType;
367 } 375 }
368 376
369 ////////////////////////////////////////////////////////////////////////////// 377 //////////////////////////////////////////////////////////////////////////////
370 378
371 class GLFocalOutside2PtConicalEffect;
372
373 class FocalOutside2PtConicalEffect : public GrGradientEffect { 379 class FocalOutside2PtConicalEffect : public GrGradientEffect {
374 public: 380 public:
375 381
376 static GrFragmentProcessor* Create(GrContext* ctx, 382 static GrFragmentProcessor* Create(GrContext* ctx,
377 const SkTwoPointConicalGradient& shader, 383 const SkTwoPointConicalGradient& shader,
378 const SkMatrix& matrix, 384 const SkMatrix& matrix,
379 SkShader::TileMode tm, 385 SkShader::TileMode tm,
380 SkScalar focalX) { 386 SkScalar focalX) {
381 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shader, matrix, tm , focalX)); 387 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shader, matrix, tm , focalX));
382 } 388 }
383 389
384 virtual ~FocalOutside2PtConicalEffect() { } 390 virtual ~FocalOutside2PtConicalEffect() { }
385 391
386 static const char* Name() { return "Two-Point Conical Gradient Focal Outside "; } 392 virtual const char* name() const SK_OVERRIDE {
387 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 393 return "Two-Point Conical Gradient Focal Outside";
394 }
395
396 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE;
397
398 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
399
400 virtual uint32_t classID() const {
401 static uint32_t id = GenClassID();
402 return id;
403 }
388 404
389 bool isFlipped() const { return fIsFlipped; } 405 bool isFlipped() const { return fIsFlipped; }
390 SkScalar focal() const { return fFocalX; } 406 SkScalar focal() const { return fFocalX; }
391 407
392 typedef GLFocalOutside2PtConicalEffect GLProcessor;
393
394 private: 408 private:
395 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 409 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
396 const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConica lEffect>(); 410 const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConica lEffect>();
397 return (INHERITED::onIsEqual(sBase) && 411 return (INHERITED::onIsEqual(sBase) &&
398 this->fFocalX == s.fFocalX && 412 this->fFocalX == s.fFocalX &&
399 this->fIsFlipped == s.fIsFlipped); 413 this->fIsFlipped == s.fIsFlipped);
400 } 414 }
401 415
402 FocalOutside2PtConicalEffect(GrContext* ctx, 416 FocalOutside2PtConicalEffect(GrContext* ctx,
403 const SkTwoPointConicalGradient& shader, 417 const SkTwoPointConicalGradient& shader,
404 const SkMatrix& matrix, 418 const SkMatrix& matrix,
405 SkShader::TileMode tm, 419 SkShader::TileMode tm,
406 SkScalar focalX) 420 SkScalar focalX)
407 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX), fIsFlipped(shader.isF lippedGrad()) {} 421 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX), fIsFlipped(shader.isF lippedGrad()) {}
408 422
409 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 423 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
410 424
411 SkScalar fFocalX; 425 SkScalar fFocalX;
412 bool fIsFlipped; 426 bool fIsFlipped;
413 427
414 typedef GrGradientEffect INHERITED; 428 typedef GrGradientEffect INHERITED;
415 }; 429 };
416 430
417 class GLFocalOutside2PtConicalEffect : public GrGLGradientEffect { 431 class GLFocalOutside2PtConicalEffect : public GrGLGradientEffect {
418 public: 432 public:
419 GLFocalOutside2PtConicalEffect(const GrBackendProcessorFactory& factory, con st GrProcessor&); 433 GLFocalOutside2PtConicalEffect(const GrProcessor&);
420 virtual ~GLFocalOutside2PtConicalEffect() { } 434 virtual ~GLFocalOutside2PtConicalEffect() { }
421 435
422 virtual void emitCode(GrGLFPBuilder*, 436 virtual void emitCode(GrGLFPBuilder*,
423 const GrFragmentProcessor&, 437 const GrFragmentProcessor&,
424 const char* outputColor, 438 const char* outputColor,
425 const char* inputColor, 439 const char* inputColor,
426 const TransformedCoordsArray&, 440 const TransformedCoordsArray&,
427 const TextureSamplerArray&) SK_OVERRIDE; 441 const TextureSamplerArray&) SK_OVERRIDE;
428 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 442 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
429 443
(...skipping 12 matching lines...) Expand all
442 456
443 SkScalar fCachedFocal; 457 SkScalar fCachedFocal;
444 458
445 // @} 459 // @}
446 460
447 private: 461 private:
448 typedef GrGLGradientEffect INHERITED; 462 typedef GrGLGradientEffect INHERITED;
449 463
450 }; 464 };
451 465
452 const GrBackendFragmentProcessorFactory& FocalOutside2PtConicalEffect::getFactor y() const { 466 void FocalOutside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
453 return GrTBackendFragmentProcessorFactory<FocalOutside2PtConicalEffect>::get Instance(); 467 GrProcessorKeyBuilder* b) c onst {
468 GLFocalOutside2PtConicalEffect::GenKey(*this, caps, b);
469 }
470
471 GrGLFragmentProcessor* FocalOutside2PtConicalEffect::createGLInstance() const {
472 return SkNEW_ARGS(GLFocalOutside2PtConicalEffect, (*this));
454 } 473 }
455 474
456 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect); 475 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect);
457 476
458 /* 477 /*
459 * All Two point conical gradient test create functions may occasionally create edge case shaders 478 * All Two point conical gradient test create functions may occasionally create edge case shaders
460 */ 479 */
461 GrFragmentProcessor* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random, 480 GrFragmentProcessor* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random,
462 GrContext* context , 481 GrContext* context ,
463 const GrDrawTarget Caps&, 482 const GrDrawTarget Caps&,
(...skipping 20 matching lines...) Expand all
484 center 2, radius2, 503 center 2, radius2,
485 colors , stops, colorCount, 504 colors , stops, colorCount,
486 tm)); 505 tm));
487 SkPaint paint; 506 SkPaint paint;
488 GrFragmentProcessor* effect; 507 GrFragmentProcessor* effect;
489 GrColor paintColor; 508 GrColor paintColor;
490 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &effect)); 509 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &effect));
491 return effect; 510 return effect;
492 } 511 }
493 512
494 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrBackendPr ocessorFactory& factory, 513 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrProcessor & processor)
495 const GrProcessor & processor) 514 : fVSVaryingName(NULL)
496 : INHERITED(factory)
497 , fVSVaryingName(NULL)
498 , fFSVaryingName(NULL) 515 , fFSVaryingName(NULL)
499 , fCachedFocal(SK_ScalarMax) { 516 , fCachedFocal(SK_ScalarMax) {
500 const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtCon icalEffect>(); 517 const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtCon icalEffect>();
501 fIsFlipped = data.isFlipped(); 518 fIsFlipped = data.isFlipped();
502 } 519 }
503 520
504 void GLFocalOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 521 void GLFocalOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
505 const GrFragmentProcessor& fp, 522 const GrFragmentProcessor& fp,
506 const char* outputColor, 523 const char* outputColor,
507 const char* inputColor, 524 const char* inputColor,
508 const TransformedCoordsArray& coor ds, 525 const TransformedCoordsArray& coor ds,
509 const TextureSamplerArray& sampler s) { 526 const TextureSamplerArray& sampler s) {
510 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 527 const FocalOutside2PtConicalEffect& ge = fp.cast<FocalOutside2PtConicalEffec t>();
511 this->emitUniforms(builder, ge); 528 this->emitUniforms(builder, ge);
512 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit y, 529 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit y,
513 kFloat_GrSLType, "Conical2FSParams", 2) ; 530 kFloat_GrSLType, "Conical2FSParams", 2) ;
514 SkString tName("t"); 531 SkString tName("t");
515 SkString p0; // focalX 532 SkString p0; // focalX
516 SkString p1; // 1 - focalX * focalX 533 SkString p1; // 1 - focalX * focalX
517 534
518 builder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); 535 builder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0);
519 builder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); 536 builder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1);
520 537
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 static GrFragmentProcessor* Create(GrContext* ctx, 603 static GrFragmentProcessor* Create(GrContext* ctx,
587 const SkTwoPointConicalGradient& shader, 604 const SkTwoPointConicalGradient& shader,
588 const SkMatrix& matrix, 605 const SkMatrix& matrix,
589 SkShader::TileMode tm, 606 SkShader::TileMode tm,
590 SkScalar focalX) { 607 SkScalar focalX) {
591 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shader, matrix, tm, focalX)); 608 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shader, matrix, tm, focalX));
592 } 609 }
593 610
594 virtual ~FocalInside2PtConicalEffect() {} 611 virtual ~FocalInside2PtConicalEffect() {}
595 612
596 static const char* Name() { return "Two-Point Conical Gradient Focal Inside" ; } 613 virtual const char* name() const SK_OVERRIDE {
597 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 614 return "Two-Point Conical Gradient Focal Inside";
615 }
616
617 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE;
618
619 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
620
621 virtual uint32_t classID() const {
622 static uint32_t id = GenClassID();
623 return id;
624 }
598 625
599 SkScalar focal() const { return fFocalX; } 626 SkScalar focal() const { return fFocalX; }
600 627
601 typedef GLFocalInside2PtConicalEffect GLProcessor; 628 typedef GLFocalInside2PtConicalEffect GLProcessor;
602 629
603 private: 630 private:
604 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 631 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
605 const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalE ffect>(); 632 const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalE ffect>();
606 return (INHERITED::onIsEqual(sBase) && 633 return (INHERITED::onIsEqual(sBase) &&
607 this->fFocalX == s.fFocalX); 634 this->fFocalX == s.fFocalX);
608 } 635 }
609 636
610 FocalInside2PtConicalEffect(GrContext* ctx, 637 FocalInside2PtConicalEffect(GrContext* ctx,
611 const SkTwoPointConicalGradient& shader, 638 const SkTwoPointConicalGradient& shader,
612 const SkMatrix& matrix, 639 const SkMatrix& matrix,
613 SkShader::TileMode tm, 640 SkShader::TileMode tm,
614 SkScalar focalX) 641 SkScalar focalX)
615 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX) {} 642 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX) {}
616 643
617 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 644 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
618 645
619 SkScalar fFocalX; 646 SkScalar fFocalX;
620 647
621 typedef GrGradientEffect INHERITED; 648 typedef GrGradientEffect INHERITED;
622 }; 649 };
623 650
624 class GLFocalInside2PtConicalEffect : public GrGLGradientEffect { 651 class GLFocalInside2PtConicalEffect : public GrGLGradientEffect {
625 public: 652 public:
626 GLFocalInside2PtConicalEffect(const GrBackendProcessorFactory& factory, cons t GrProcessor&); 653 GLFocalInside2PtConicalEffect(const GrProcessor&);
627 virtual ~GLFocalInside2PtConicalEffect() {} 654 virtual ~GLFocalInside2PtConicalEffect() {}
628 655
629 virtual void emitCode(GrGLFPBuilder*, 656 virtual void emitCode(GrGLFPBuilder*,
630 const GrFragmentProcessor&, 657 const GrFragmentProcessor&,
631 const char* outputColor, 658 const char* outputColor,
632 const char* inputColor, 659 const char* inputColor,
633 const TransformedCoordsArray&, 660 const TransformedCoordsArray&,
634 const TextureSamplerArray&) SK_OVERRIDE; 661 const TextureSamplerArray&) SK_OVERRIDE;
635 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 662 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
636 663
(...skipping 10 matching lines...) Expand all
647 674
648 SkScalar fCachedFocal; 675 SkScalar fCachedFocal;
649 676
650 // @} 677 // @}
651 678
652 private: 679 private:
653 typedef GrGLGradientEffect INHERITED; 680 typedef GrGLGradientEffect INHERITED;
654 681
655 }; 682 };
656 683
657 const GrBackendFragmentProcessorFactory& FocalInside2PtConicalEffect::getFactory () const { 684 void FocalInside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
658 return GrTBackendFragmentProcessorFactory<FocalInside2PtConicalEffect>::getI nstance(); 685 GrProcessorKeyBuilder* b) const {
686 GLFocalInside2PtConicalEffect::GenKey(*this, caps, b);
687 }
688
689 GrGLFragmentProcessor* FocalInside2PtConicalEffect::createGLInstance() const {
690 return SkNEW_ARGS(GLFocalInside2PtConicalEffect, (*this));
659 } 691 }
660 692
661 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect); 693 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect);
662 694
663 /* 695 /*
664 * All Two point conical gradient test create functions may occasionally create edge case shaders 696 * All Two point conical gradient test create functions may occasionally create edge case shaders
665 */ 697 */
666 GrFragmentProcessor* FocalInside2PtConicalEffect::TestCreate(SkRandom* random, 698 GrFragmentProcessor* FocalInside2PtConicalEffect::TestCreate(SkRandom* random,
667 GrContext* context, 699 GrContext* context,
668 const GrDrawTargetC aps&, 700 const GrDrawTargetC aps&,
(...skipping 22 matching lines...) Expand all
691 center 2, radius2, 723 center 2, radius2,
692 colors , stops, colorCount, 724 colors , stops, colorCount,
693 tm)); 725 tm));
694 SkPaint paint; 726 SkPaint paint;
695 GrColor paintColor; 727 GrColor paintColor;
696 GrFragmentProcessor* fp; 728 GrFragmentProcessor* fp;
697 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &fp)); 729 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &fp));
698 return fp; 730 return fp;
699 } 731 }
700 732
701 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendProc essorFactory& factory, 733 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&)
702 const GrProcessor&) 734 : fVSVaryingName(NULL)
703 : INHERITED(factory)
704 , fVSVaryingName(NULL)
705 , fFSVaryingName(NULL) 735 , fFSVaryingName(NULL)
706 , fCachedFocal(SK_ScalarMax) {} 736 , fCachedFocal(SK_ScalarMax) {}
707 737
708 void GLFocalInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 738 void GLFocalInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
709 const GrFragmentProcessor& fp, 739 const GrFragmentProcessor& fp,
710 const char* outputColor, 740 const char* outputColor,
711 const char* inputColor, 741 const char* inputColor,
712 const TransformedCoordsArray& coord s, 742 const TransformedCoordsArray& coord s,
713 const TextureSamplerArray& samplers ) { 743 const TextureSamplerArray& samplers ) {
714 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 744 const FocalInside2PtConicalEffect& ge = fp.cast<FocalInside2PtConicalEffect> ();
715 this->emitUniforms(builder, ge); 745 this->emitUniforms(builder, ge);
716 fFocalUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 746 fFocalUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
717 kFloat_GrSLType, "Conical2FSParams"); 747 kFloat_GrSLType, "Conical2FSParams");
718 SkString tName("t"); 748 SkString tName("t");
719 749
720 // this is the distance along x-axis from the end center to focal point in 750 // this is the distance along x-axis from the end center to focal point in
721 // transformed coordinates 751 // transformed coordinates
722 GrGLShaderVar focal = builder->getUniformVariable(fFocalUni); 752 GrGLShaderVar focal = builder->getUniformVariable(fFocalUni);
723 753
724 // if we have a vec3 from being in perspective, convert it to a vec2 first 754 // 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; 837 info->fB = B;
808 info->fC = C; 838 info->fC = C;
809 839
810 // if A ends up being negative, the start circle is contained completely ins ide the end cirlce 840 // if A ends up being negative, the start circle is contained completely ins ide the end cirlce
811 if (A < 0.f) { 841 if (A < 0.f) {
812 return kInside_ConicalType; 842 return kInside_ConicalType;
813 } 843 }
814 return kOutside_ConicalType; 844 return kOutside_ConicalType;
815 } 845 }
816 846
817 class GLCircleInside2PtConicalEffect;
818
819 class CircleInside2PtConicalEffect : public GrGradientEffect { 847 class CircleInside2PtConicalEffect : public GrGradientEffect {
820 public: 848 public:
821 849
822 static GrFragmentProcessor* Create(GrContext* ctx, 850 static GrFragmentProcessor* Create(GrContext* ctx,
823 const SkTwoPointConicalGradient& shader, 851 const SkTwoPointConicalGradient& shader,
824 const SkMatrix& matrix, 852 const SkMatrix& matrix,
825 SkShader::TileMode tm, 853 SkShader::TileMode tm,
826 const CircleConicalInfo& info) { 854 const CircleConicalInfo& info) {
827 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shader, matrix, tm , info)); 855 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shader, matrix, tm , info));
828 } 856 }
829 857
830 virtual ~CircleInside2PtConicalEffect() {} 858 virtual ~CircleInside2PtConicalEffect() {}
831 859
832 static const char* Name() { return "Two-Point Conical Gradient Inside"; } 860 virtual const char* name() const SK_OVERRIDE { return "Two-Point Conical Gra dient Inside"; }
833 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 861
862 virtual void getGLProcessorKey(const GrGLCaps& caps,
863 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
864
865 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
866
867 virtual uint32_t classID() const {
868 static uint32_t id = GenClassID();
869 return id;
870 }
834 871
835 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } 872 SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
836 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } 873 SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
837 SkScalar A() const { return fInfo.fA; } 874 SkScalar A() const { return fInfo.fA; }
838 SkScalar B() const { return fInfo.fB; } 875 SkScalar B() const { return fInfo.fB; }
839 SkScalar C() const { return fInfo.fC; } 876 SkScalar C() const { return fInfo.fC; }
840 877
841 typedef GLCircleInside2PtConicalEffect GLProcessor;
842
843 private: 878 private:
844 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 879 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
845 const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConica lEffect>(); 880 const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConica lEffect>();
846 return (INHERITED::onIsEqual(sBase) && 881 return (INHERITED::onIsEqual(sBase) &&
847 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && 882 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd &&
848 this->fInfo.fA == s.fInfo.fA && 883 this->fInfo.fA == s.fInfo.fA &&
849 this->fInfo.fB == s.fInfo.fB && 884 this->fInfo.fB == s.fInfo.fB &&
850 this->fInfo.fC == s.fInfo.fC); 885 this->fInfo.fC == s.fInfo.fC);
851 } 886 }
852 887
853 CircleInside2PtConicalEffect(GrContext* ctx, 888 CircleInside2PtConicalEffect(GrContext* ctx,
854 const SkTwoPointConicalGradient& shader, 889 const SkTwoPointConicalGradient& shader,
855 const SkMatrix& matrix, 890 const SkMatrix& matrix,
856 SkShader::TileMode tm, 891 SkShader::TileMode tm,
857 const CircleConicalInfo& info) 892 const CircleConicalInfo& info)
858 : INHERITED(ctx, shader, matrix, tm), fInfo(info) {} 893 : INHERITED(ctx, shader, matrix, tm), fInfo(info) {}
859 894
860 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 895 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
861 896
862 const CircleConicalInfo fInfo; 897 const CircleConicalInfo fInfo;
863 898
864 typedef GrGradientEffect INHERITED; 899 typedef GrGradientEffect INHERITED;
865 }; 900 };
866 901
867 class GLCircleInside2PtConicalEffect : public GrGLGradientEffect { 902 class GLCircleInside2PtConicalEffect : public GrGLGradientEffect {
868 public: 903 public:
869 GLCircleInside2PtConicalEffect(const GrBackendProcessorFactory& factory, con st GrProcessor&); 904 GLCircleInside2PtConicalEffect(const GrProcessor&);
870 virtual ~GLCircleInside2PtConicalEffect() {} 905 virtual ~GLCircleInside2PtConicalEffect() {}
871 906
872 virtual void emitCode(GrGLFPBuilder*, 907 virtual void emitCode(GrGLFPBuilder*,
873 const GrFragmentProcessor&, 908 const GrFragmentProcessor&,
874 const char* outputColor, 909 const char* outputColor,
875 const char* inputColor, 910 const char* inputColor,
876 const TransformedCoordsArray&, 911 const TransformedCoordsArray&,
877 const TextureSamplerArray&) SK_OVERRIDE; 912 const TextureSamplerArray&) SK_OVERRIDE;
878 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 913 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
879 914
(...skipping 15 matching lines...) Expand all
895 SkScalar fCachedB; 930 SkScalar fCachedB;
896 SkScalar fCachedC; 931 SkScalar fCachedC;
897 932
898 // @} 933 // @}
899 934
900 private: 935 private:
901 typedef GrGLGradientEffect INHERITED; 936 typedef GrGLGradientEffect INHERITED;
902 937
903 }; 938 };
904 939
905 const GrBackendFragmentProcessorFactory& CircleInside2PtConicalEffect::getFactor y() const { 940 void CircleInside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
906 return GrTBackendFragmentProcessorFactory<CircleInside2PtConicalEffect>::get Instance(); 941 GrProcessorKeyBuilder* b) c onst {
942 GLCircleInside2PtConicalEffect::GenKey(*this, caps, b);
943 }
944
945 GrGLFragmentProcessor* CircleInside2PtConicalEffect::createGLInstance() const {
946 return SkNEW_ARGS(GLCircleInside2PtConicalEffect, (*this));
907 } 947 }
908 948
909 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect); 949 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect);
910 950
911 /* 951 /*
912 * All Two point conical gradient test create functions may occasionally create edge case shaders 952 * All Two point conical gradient test create functions may occasionally create edge case shaders
913 */ 953 */
914 GrFragmentProcessor* CircleInside2PtConicalEffect::TestCreate(SkRandom* random, 954 GrFragmentProcessor* CircleInside2PtConicalEffect::TestCreate(SkRandom* random,
915 GrContext* context , 955 GrContext* context ,
916 const GrDrawTarget Caps&, 956 const GrDrawTarget Caps&,
(...skipping 21 matching lines...) Expand all
938 center 2, radius2, 978 center 2, radius2,
939 colors , stops, colorCount, 979 colors , stops, colorCount,
940 tm)); 980 tm));
941 SkPaint paint; 981 SkPaint paint;
942 GrColor paintColor; 982 GrColor paintColor;
943 GrFragmentProcessor* processor; 983 GrFragmentProcessor* processor;
944 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &processor)); 984 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &processor));
945 return processor; 985 return processor;
946 } 986 }
947 987
948 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrBackendPr ocessorFactory& factory, 988 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrProcessor & processor)
949 const GrProcessor & processor) 989 : fVSVaryingName(NULL)
950 : INHERITED(factory)
951 , fVSVaryingName(NULL)
952 , fFSVaryingName(NULL) 990 , fFSVaryingName(NULL)
953 , fCachedCenterX(SK_ScalarMax) 991 , fCachedCenterX(SK_ScalarMax)
954 , fCachedCenterY(SK_ScalarMax) 992 , fCachedCenterY(SK_ScalarMax)
955 , fCachedA(SK_ScalarMax) 993 , fCachedA(SK_ScalarMax)
956 , fCachedB(SK_ScalarMax) 994 , fCachedB(SK_ScalarMax)
957 , fCachedC(SK_ScalarMax) {} 995 , fCachedC(SK_ScalarMax) {}
958 996
959 void GLCircleInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 997 void GLCircleInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
960 const GrFragmentProcessor& fp, 998 const GrFragmentProcessor& fp,
961 const char* outputColor, 999 const char* outputColor,
962 const char* inputColor, 1000 const char* inputColor,
963 const TransformedCoordsArray& coor ds, 1001 const TransformedCoordsArray& coor ds,
964 const TextureSamplerArray& sampler s) { 1002 const TextureSamplerArray& sampler s) {
965 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 1003 const CircleInside2PtConicalEffect& ge = fp.cast<CircleInside2PtConicalEffec t>();
966 this->emitUniforms(builder, ge); 1004 this->emitUniforms(builder, ge);
967 fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1005 fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
968 kVec2f_GrSLType, "Conical2FSCenter"); 1006 kVec2f_GrSLType, "Conical2FSCenter");
969 fParamUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1007 fParamUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
970 kVec3f_GrSLType, "Conical2FSParams"); 1008 kVec3f_GrSLType, "Conical2FSParams");
971 SkString tName("t"); 1009 SkString tName("t");
972 1010
973 GrGLShaderVar center = builder->getUniformVariable(fCenterUni); 1011 GrGLShaderVar center = builder->getUniformVariable(fCenterUni);
974 // params.x = A 1012 // params.x = A
975 // params.y = B 1013 // params.y = B
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 } 1060 }
1023 } 1061 }
1024 1062
1025 void GLCircleInside2PtConicalEffect::GenKey(const GrProcessor& processor, 1063 void GLCircleInside2PtConicalEffect::GenKey(const GrProcessor& processor,
1026 const GrGLCaps&, GrProcessorKeyBuild er* b) { 1064 const GrGLCaps&, GrProcessorKeyBuild er* b) {
1027 b->add32(GenBaseGradientKey(processor)); 1065 b->add32(GenBaseGradientKey(processor));
1028 } 1066 }
1029 1067
1030 ////////////////////////////////////////////////////////////////////////////// 1068 //////////////////////////////////////////////////////////////////////////////
1031 1069
1032 class GLCircleOutside2PtConicalEffect;
1033
1034 class CircleOutside2PtConicalEffect : public GrGradientEffect { 1070 class CircleOutside2PtConicalEffect : public GrGradientEffect {
1035 public: 1071 public:
1036 1072
1037 static GrFragmentProcessor* Create(GrContext* ctx, 1073 static GrFragmentProcessor* Create(GrContext* ctx,
1038 const SkTwoPointConicalGradient& shader, 1074 const SkTwoPointConicalGradient& shader,
1039 const SkMatrix& matrix, 1075 const SkMatrix& matrix,
1040 SkShader::TileMode tm, 1076 SkShader::TileMode tm,
1041 const CircleConicalInfo& info) { 1077 const CircleConicalInfo& info) {
1042 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shader, matrix, t m, info)); 1078 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shader, matrix, t m, info));
1043 } 1079 }
1044 1080
1045 virtual ~CircleOutside2PtConicalEffect() {} 1081 virtual ~CircleOutside2PtConicalEffect() {}
1046 1082
1047 static const char* Name() { return "Two-Point Conical Gradient Outside"; } 1083 virtual const char* name() const SK_OVERRIDE { return "Two-Point Conical Gra dient Outside"; }
1048 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 1084
1085 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE;
1086
1087 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
1088
1089 virtual uint32_t classID() const {
1090 static uint32_t id = GenClassID();
1091 return id;
1092 }
1049 1093
1050 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } 1094 SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
1051 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } 1095 SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
1052 SkScalar A() const { return fInfo.fA; } 1096 SkScalar A() const { return fInfo.fA; }
1053 SkScalar B() const { return fInfo.fB; } 1097 SkScalar B() const { return fInfo.fB; }
1054 SkScalar C() const { return fInfo.fC; } 1098 SkScalar C() const { return fInfo.fC; }
1055 SkScalar tLimit() const { return fTLimit; } 1099 SkScalar tLimit() const { return fTLimit; }
1056 bool isFlipped() const { return fIsFlipped; } 1100 bool isFlipped() const { return fIsFlipped; }
1057 1101
1058 typedef GLCircleOutside2PtConicalEffect GLProcessor;
1059
1060 private: 1102 private:
1061 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { 1103 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE {
1062 const CircleOutside2PtConicalEffect& s = sBase.cast<CircleOutside2PtConi calEffect>(); 1104 const CircleOutside2PtConicalEffect& s = sBase.cast<CircleOutside2PtConi calEffect>();
1063 return (INHERITED::onIsEqual(sBase) && 1105 return (INHERITED::onIsEqual(sBase) &&
1064 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && 1106 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd &&
1065 this->fInfo.fA == s.fInfo.fA && 1107 this->fInfo.fA == s.fInfo.fA &&
1066 this->fInfo.fB == s.fInfo.fB && 1108 this->fInfo.fB == s.fInfo.fB &&
1067 this->fInfo.fC == s.fInfo.fC && 1109 this->fInfo.fC == s.fInfo.fC &&
1068 this->fTLimit == s.fTLimit && 1110 this->fTLimit == s.fTLimit &&
1069 this->fIsFlipped == s.fIsFlipped); 1111 this->fIsFlipped == s.fIsFlipped);
(...skipping 19 matching lines...) Expand all
1089 1131
1090 const CircleConicalInfo fInfo; 1132 const CircleConicalInfo fInfo;
1091 SkScalar fTLimit; 1133 SkScalar fTLimit;
1092 bool fIsFlipped; 1134 bool fIsFlipped;
1093 1135
1094 typedef GrGradientEffect INHERITED; 1136 typedef GrGradientEffect INHERITED;
1095 }; 1137 };
1096 1138
1097 class GLCircleOutside2PtConicalEffect : public GrGLGradientEffect { 1139 class GLCircleOutside2PtConicalEffect : public GrGLGradientEffect {
1098 public: 1140 public:
1099 GLCircleOutside2PtConicalEffect(const GrBackendProcessorFactory&, const GrPr ocessor&); 1141 GLCircleOutside2PtConicalEffect(const GrProcessor&);
1100 virtual ~GLCircleOutside2PtConicalEffect() {} 1142 virtual ~GLCircleOutside2PtConicalEffect() {}
1101 1143
1102 virtual void emitCode(GrGLFPBuilder*, 1144 virtual void emitCode(GrGLFPBuilder*,
1103 const GrFragmentProcessor&, 1145 const GrFragmentProcessor&,
1104 const char* outputColor, 1146 const char* outputColor,
1105 const char* inputColor, 1147 const char* inputColor,
1106 const TransformedCoordsArray&, 1148 const TransformedCoordsArray&,
1107 const TextureSamplerArray&) SK_OVERRIDE; 1149 const TextureSamplerArray&) SK_OVERRIDE;
1108 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 1150 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
1109 1151
(...skipping 18 matching lines...) Expand all
1128 SkScalar fCachedC; 1170 SkScalar fCachedC;
1129 SkScalar fCachedTLimit; 1171 SkScalar fCachedTLimit;
1130 1172
1131 // @} 1173 // @}
1132 1174
1133 private: 1175 private:
1134 typedef GrGLGradientEffect INHERITED; 1176 typedef GrGLGradientEffect INHERITED;
1135 1177
1136 }; 1178 };
1137 1179
1138 const GrBackendFragmentProcessorFactory& CircleOutside2PtConicalEffect::getFacto ry() const { 1180 void CircleOutside2PtConicalEffect::getGLProcessorKey(const GrGLCaps& caps,
1139 return GrTBackendFragmentProcessorFactory<CircleOutside2PtConicalEffect>::ge tInstance(); 1181 GrProcessorKeyBuilder* b) const {
1182 GLCircleOutside2PtConicalEffect::GenKey(*this, caps, b);
1183 }
1184
1185 GrGLFragmentProcessor* CircleOutside2PtConicalEffect::createGLInstance() const S K_OVERRIDE {
1186 return SkNEW_ARGS(GLCircleOutside2PtConicalEffect, (*this));
1140 } 1187 }
1141 1188
1142 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect); 1189 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect);
1143 1190
1144 /* 1191 /*
1145 * All Two point conical gradient test create functions may occasionally create edge case shaders 1192 * All Two point conical gradient test create functions may occasionally create edge case shaders
1146 */ 1193 */
1147 GrFragmentProcessor* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random, 1194 GrFragmentProcessor* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random,
1148 GrContext* contex t, 1195 GrContext* contex t,
1149 const GrDrawTarge tCaps&, 1196 const GrDrawTarge tCaps&,
(...skipping 22 matching lines...) Expand all
1172 center 2, radius2, 1219 center 2, radius2,
1173 colors , stops, colorCount, 1220 colors , stops, colorCount,
1174 tm)); 1221 tm));
1175 SkPaint paint; 1222 SkPaint paint;
1176 GrColor paintColor; 1223 GrColor paintColor;
1177 GrFragmentProcessor* processor; 1224 GrFragmentProcessor* processor;
1178 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &processor)); 1225 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor , &processor));
1179 return processor; 1226 return processor;
1180 } 1227 }
1181 1228
1182 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrBackend ProcessorFactory& factory, 1229 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrProcess or& processor)
1183 const GrProcess or& processor) 1230 : fVSVaryingName(NULL)
1184 : INHERITED(factory)
1185 , fVSVaryingName(NULL)
1186 , fFSVaryingName(NULL) 1231 , fFSVaryingName(NULL)
1187 , fCachedCenterX(SK_ScalarMax) 1232 , fCachedCenterX(SK_ScalarMax)
1188 , fCachedCenterY(SK_ScalarMax) 1233 , fCachedCenterY(SK_ScalarMax)
1189 , fCachedA(SK_ScalarMax) 1234 , fCachedA(SK_ScalarMax)
1190 , fCachedB(SK_ScalarMax) 1235 , fCachedB(SK_ScalarMax)
1191 , fCachedC(SK_ScalarMax) 1236 , fCachedC(SK_ScalarMax)
1192 , fCachedTLimit(SK_ScalarMax) { 1237 , fCachedTLimit(SK_ScalarMax) {
1193 const CircleOutside2PtConicalEffect& data = processor.cast<CircleOutside2PtC onicalEffect>(); 1238 const CircleOutside2PtConicalEffect& data = processor.cast<CircleOutside2PtC onicalEffect>();
1194 fIsFlipped = data.isFlipped(); 1239 fIsFlipped = data.isFlipped();
1195 } 1240 }
1196 1241
1197 void GLCircleOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, 1242 void GLCircleOutside2PtConicalEffect::emitCode(GrGLFPBuilder* builder,
1198 const GrFragmentProcessor& fp, 1243 const GrFragmentProcessor& fp,
1199 const char* outputColor, 1244 const char* outputColor,
1200 const char* inputColor, 1245 const char* inputColor,
1201 const TransformedCoordsArray& coo rds, 1246 const TransformedCoordsArray& coo rds,
1202 const TextureSamplerArray& sample rs) { 1247 const TextureSamplerArray& sample rs) {
1203 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); 1248 const CircleOutside2PtConicalEffect& ge = fp.cast<CircleOutside2PtConicalEff ect>();
1204 this->emitUniforms(builder, ge); 1249 this->emitUniforms(builder, ge);
1205 fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1250 fCenterUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1206 kVec2f_GrSLType, "Conical2FSCenter"); 1251 kVec2f_GrSLType, "Conical2FSCenter");
1207 fParamUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1252 fParamUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1208 kVec4f_GrSLType, "Conical2FSParams"); 1253 kVec4f_GrSLType, "Conical2FSParams");
1209 SkString tName("t"); 1254 SkString tName("t");
1210 1255
1211 GrGLShaderVar center = builder->getUniformVariable(fCenterUni); 1256 GrGLShaderVar center = builder->getUniformVariable(fCenterUni);
1212 // params.x = A 1257 // params.x = A
1213 // params.y = B 1258 // 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); 1370 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf o);
1326 } else if (type == kEdge_ConicalType) { 1371 } else if (type == kEdge_ConicalType) {
1327 set_matrix_edge_conical(shader, &matrix); 1372 set_matrix_edge_conical(shader, &matrix);
1328 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); 1373 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm);
1329 } else { 1374 } else {
1330 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in fo); 1375 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in fo);
1331 } 1376 }
1332 } 1377 }
1333 1378
1334 #endif 1379 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698