| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 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 "SkTwoPointRadialGradient.h" | 9 #include "SkTwoPointRadialGradient.h" |
| 10 | 10 |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 fOneOverTwoA = fA ? SkScalarInvert(fA * 2) : 0; | 379 fOneOverTwoA = fA ? SkScalarInvert(fA * 2) : 0; |
| 380 | 380 |
| 381 fPtsToUnit.setTranslate(-fCenter1.fX, -fCenter1.fY); | 381 fPtsToUnit.setTranslate(-fCenter1.fX, -fCenter1.fY); |
| 382 fPtsToUnit.postScale(inv, inv); | 382 fPtsToUnit.postScale(inv, inv); |
| 383 } | 383 } |
| 384 | 384 |
| 385 ///////////////////////////////////////////////////////////////////// | 385 ///////////////////////////////////////////////////////////////////// |
| 386 | 386 |
| 387 #if SK_SUPPORT_GPU | 387 #if SK_SUPPORT_GPU |
| 388 | 388 |
| 389 #include "GrTBackendProcessorFactory.h" | 389 #include "SkGr.h" |
| 390 #include "gl/builders/GrGLProgramBuilder.h" | 390 #include "gl/builders/GrGLProgramBuilder.h" |
| 391 #include "SkGr.h" | |
| 392 | 391 |
| 393 // For brevity | 392 // For brevity |
| 394 typedef GrGLProgramDataManager::UniformHandle UniformHandle; | 393 typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
| 395 | 394 |
| 396 class GrGLRadial2Gradient : public GrGLGradientEffect { | 395 class GrGLRadial2Gradient : public GrGLGradientEffect { |
| 397 | 396 |
| 398 public: | 397 public: |
| 399 | 398 |
| 400 GrGLRadial2Gradient(const GrBackendProcessorFactory& factory, const GrProces
sor&); | 399 GrGLRadial2Gradient(const GrProcessor&); |
| 401 virtual ~GrGLRadial2Gradient() { } | 400 virtual ~GrGLRadial2Gradient() { } |
| 402 | 401 |
| 403 virtual void emitCode(GrGLFPBuilder*, | 402 virtual void emitCode(GrGLFPBuilder*, |
| 404 const GrFragmentProcessor&, | 403 const GrFragmentProcessor&, |
| 405 const char* outputColor, | 404 const char* outputColor, |
| 406 const char* inputColor, | 405 const char* inputColor, |
| 407 const TransformedCoordsArray&, | 406 const TransformedCoordsArray&, |
| 408 const TextureSamplerArray&) SK_OVERRIDE; | 407 const TextureSamplerArray&) SK_OVERRIDE; |
| 409 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; | 408 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; |
| 410 | 409 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 440 public: | 439 public: |
| 441 static GrFragmentProcessor* Create(GrContext* ctx, | 440 static GrFragmentProcessor* Create(GrContext* ctx, |
| 442 const SkTwoPointRadialGradient& shader, | 441 const SkTwoPointRadialGradient& shader, |
| 443 const SkMatrix& matrix, | 442 const SkMatrix& matrix, |
| 444 SkShader::TileMode tm) { | 443 SkShader::TileMode tm) { |
| 445 return SkNEW_ARGS(GrRadial2Gradient, (ctx, shader, matrix, tm)); | 444 return SkNEW_ARGS(GrRadial2Gradient, (ctx, shader, matrix, tm)); |
| 446 } | 445 } |
| 447 | 446 |
| 448 virtual ~GrRadial2Gradient() { } | 447 virtual ~GrRadial2Gradient() { } |
| 449 | 448 |
| 450 static const char* Name() { return "Two-Point Radial Gradient"; } | 449 virtual const char* name() const SK_OVERRIDE { return "Two-Point Radial Grad
ient"; } |
| 451 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR
IDE { | 450 |
| 452 return GrTBackendFragmentProcessorFactory<GrRadial2Gradient>::getInstanc
e(); | 451 virtual void getGLProcessorKey(const GrGLCaps& caps, |
| 452 GrProcessorKeyBuilder* b) const SK_OVERRIDE { |
| 453 GrGLRadial2Gradient::GenKey(*this, caps, b); |
| 454 } |
| 455 |
| 456 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE { |
| 457 return SkNEW_ARGS(GrGLRadial2Gradient, (*this)); |
| 458 } |
| 459 |
| 460 virtual uint32_t classID() const { |
| 461 static uint32_t id = GenClassID(); |
| 462 return id; |
| 453 } | 463 } |
| 454 | 464 |
| 455 // The radial gradient parameters can collapse to a linear (instead of quadr
atic) equation. | 465 // The radial gradient parameters can collapse to a linear (instead of quadr
atic) equation. |
| 456 bool isDegenerate() const { return SK_Scalar1 == fCenterX1; } | 466 bool isDegenerate() const { return SK_Scalar1 == fCenterX1; } |
| 457 SkScalar center() const { return fCenterX1; } | 467 SkScalar center() const { return fCenterX1; } |
| 458 SkScalar radius() const { return fRadius0; } | 468 SkScalar radius() const { return fRadius0; } |
| 459 bool isPosRoot() const { return SkToBool(fPosRoot); } | 469 bool isPosRoot() const { return SkToBool(fPosRoot); } |
| 460 | 470 |
| 461 typedef GrGLRadial2Gradient GLProcessor; | |
| 462 | |
| 463 private: | 471 private: |
| 464 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { | 472 virtual bool onIsEqual(const GrFragmentProcessor& sBase) const SK_OVERRIDE { |
| 465 const GrRadial2Gradient& s = sBase.cast<GrRadial2Gradient>(); | 473 const GrRadial2Gradient& s = sBase.cast<GrRadial2Gradient>(); |
| 466 return (INHERITED::onIsEqual(sBase) && | 474 return (INHERITED::onIsEqual(sBase) && |
| 467 this->fCenterX1 == s.fCenterX1 && | 475 this->fCenterX1 == s.fCenterX1 && |
| 468 this->fRadius0 == s.fRadius0 && | 476 this->fRadius0 == s.fRadius0 && |
| 469 this->fPosRoot == s.fPosRoot); | 477 this->fPosRoot == s.fPosRoot); |
| 470 } | 478 } |
| 471 | 479 |
| 472 GrRadial2Gradient(GrContext* ctx, | 480 GrRadial2Gradient(GrContext* ctx, |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 tm)); | 543 tm)); |
| 536 SkPaint paint; | 544 SkPaint paint; |
| 537 GrFragmentProcessor* fp; | 545 GrFragmentProcessor* fp; |
| 538 GrColor paintColor; | 546 GrColor paintColor; |
| 539 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor
, &fp)); | 547 SkAssertResult(shader->asFragmentProcessor(context, paint, NULL, &paintColor
, &fp)); |
| 540 return fp; | 548 return fp; |
| 541 } | 549 } |
| 542 | 550 |
| 543 ///////////////////////////////////////////////////////////////////// | 551 ///////////////////////////////////////////////////////////////////// |
| 544 | 552 |
| 545 GrGLRadial2Gradient::GrGLRadial2Gradient(const GrBackendProcessorFactory& factor
y, | 553 GrGLRadial2Gradient::GrGLRadial2Gradient(const GrProcessor& processor) |
| 546 const GrProcessor& processor) | 554 : fVSVaryingName(NULL) |
| 547 : INHERITED(factory) | |
| 548 , fVSVaryingName(NULL) | |
| 549 , fFSVaryingName(NULL) | 555 , fFSVaryingName(NULL) |
| 550 , fCachedCenter(SK_ScalarMax) | 556 , fCachedCenter(SK_ScalarMax) |
| 551 , fCachedRadius(-SK_ScalarMax) | 557 , fCachedRadius(-SK_ScalarMax) |
| 552 , fCachedPosRoot(0) { | 558 , fCachedPosRoot(0) { |
| 553 | 559 |
| 554 const GrRadial2Gradient& data = processor.cast<GrRadial2Gradient>(); | 560 const GrRadial2Gradient& data = processor.cast<GrRadial2Gradient>(); |
| 555 fIsDegenerate = data.isDegenerate(); | 561 fIsDegenerate = data.isDegenerate(); |
| 556 } | 562 } |
| 557 | 563 |
| 558 void GrGLRadial2Gradient::emitCode(GrGLFPBuilder* builder, | 564 void GrGLRadial2Gradient::emitCode(GrGLFPBuilder* builder, |
| 559 const GrFragmentProcessor& fp, | 565 const GrFragmentProcessor& fp, |
| 560 const char* outputColor, | 566 const char* outputColor, |
| 561 const char* inputColor, | 567 const char* inputColor, |
| 562 const TransformedCoordsArray& coords, | 568 const TransformedCoordsArray& coords, |
| 563 const TextureSamplerArray& samplers) { | 569 const TextureSamplerArray& samplers) { |
| 564 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); | 570 const GrRadial2Gradient& ge = fp.cast<GrRadial2Gradient>(); |
| 565 this->emitUniforms(builder, ge); | 571 this->emitUniforms(builder, ge); |
| 566 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit
y, | 572 fParamUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibilit
y, |
| 567 kFloat_GrSLType, "Radial2FSParams", 6); | 573 kFloat_GrSLType, "Radial2FSParams", 6); |
| 568 | 574 |
| 569 SkString cName("c"); | 575 SkString cName("c"); |
| 570 SkString ac4Name("ac4"); | 576 SkString ac4Name("ac4"); |
| 571 SkString rootName("root"); | 577 SkString rootName("root"); |
| 572 SkString t; | 578 SkString t; |
| 573 SkString p0; | 579 SkString p0; |
| 574 SkString p1; | 580 SkString p1; |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 707 | 713 |
| 708 #else | 714 #else |
| 709 | 715 |
| 710 bool SkTwoPointRadialGradient::asFragmentProcessor(GrContext*, const SkPaint&, c
onst SkMatrix*, | 716 bool SkTwoPointRadialGradient::asFragmentProcessor(GrContext*, const SkPaint&, c
onst SkMatrix*, |
| 711 GrColor*, GrFragmentProcessor
**) const { | 717 GrColor*, GrFragmentProcessor
**) const { |
| 712 SkDEBUGFAIL("Should not call in GPU-less build"); | 718 SkDEBUGFAIL("Should not call in GPU-less build"); |
| 713 return false; | 719 return false; |
| 714 } | 720 } |
| 715 | 721 |
| 716 #endif | 722 #endif |
| OLD | NEW |