| 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 "SkRadialGradient.h" | 9 #include "SkRadialGradient.h" |
| 10 #include "SkRadialGradient_Table.h" | 10 #include "SkRadialGradient_Table.h" |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 private: | 482 private: |
| 483 | 483 |
| 484 typedef GrGLGradientEffect INHERITED; | 484 typedef GrGLGradientEffect INHERITED; |
| 485 | 485 |
| 486 }; | 486 }; |
| 487 | 487 |
| 488 ///////////////////////////////////////////////////////////////////// | 488 ///////////////////////////////////////////////////////////////////// |
| 489 | 489 |
| 490 class GrRadialGradient : public GrGradientEffect { | 490 class GrRadialGradient : public GrGradientEffect { |
| 491 public: | 491 public: |
| 492 static GrEffectRef* Create(GrContext* ctx, | 492 static GrEffect* Create(GrContext* ctx, |
| 493 const SkRadialGradient& shader, | 493 const SkRadialGradient& shader, |
| 494 const SkMatrix& matrix, | 494 const SkMatrix& matrix, |
| 495 SkShader::TileMode tm) { | 495 SkShader::TileMode tm) { |
| 496 return SkNEW_ARGS(GrRadialGradient, (ctx, shader, matrix, tm)); | 496 return SkNEW_ARGS(GrRadialGradient, (ctx, shader, matrix, tm)); |
| 497 } | 497 } |
| 498 | 498 |
| 499 virtual ~GrRadialGradient() { } | 499 virtual ~GrRadialGradient() { } |
| 500 | 500 |
| 501 static const char* Name() { return "Radial Gradient"; } | 501 static const char* Name() { return "Radial Gradient"; } |
| 502 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE { | 502 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE { |
| 503 return GrTBackendEffectFactory<GrRadialGradient>::getInstance(); | 503 return GrTBackendEffectFactory<GrRadialGradient>::getInstance(); |
| 504 } | 504 } |
| 505 | 505 |
| 506 typedef GrGLRadialGradient GLEffect; | 506 typedef GrGLRadialGradient GLEffect; |
| 507 | 507 |
| 508 private: | 508 private: |
| 509 GrRadialGradient(GrContext* ctx, | 509 GrRadialGradient(GrContext* ctx, |
| 510 const SkRadialGradient& shader, | 510 const SkRadialGradient& shader, |
| 511 const SkMatrix& matrix, | 511 const SkMatrix& matrix, |
| 512 SkShader::TileMode tm) | 512 SkShader::TileMode tm) |
| 513 : INHERITED(ctx, shader, matrix, tm) { | 513 : INHERITED(ctx, shader, matrix, tm) { |
| 514 } | 514 } |
| 515 | 515 |
| 516 GR_DECLARE_EFFECT_TEST; | 516 GR_DECLARE_EFFECT_TEST; |
| 517 | 517 |
| 518 typedef GrGradientEffect INHERITED; | 518 typedef GrGradientEffect INHERITED; |
| 519 }; | 519 }; |
| 520 | 520 |
| 521 ///////////////////////////////////////////////////////////////////// | 521 ///////////////////////////////////////////////////////////////////// |
| 522 | 522 |
| 523 GR_DEFINE_EFFECT_TEST(GrRadialGradient); | 523 GR_DEFINE_EFFECT_TEST(GrRadialGradient); |
| 524 | 524 |
| 525 GrEffectRef* GrRadialGradient::TestCreate(SkRandom* random, | 525 GrEffect* GrRadialGradient::TestCreate(SkRandom* random, |
| 526 GrContext* context, | 526 GrContext* context, |
| 527 const GrDrawTargetCaps&, | 527 const GrDrawTargetCaps&, |
| 528 GrTexture**) { | 528 GrTexture**) { |
| 529 SkPoint center = {random->nextUScalar1(), random->nextUScalar1()}; | 529 SkPoint center = {random->nextUScalar1(), random->nextUScalar1()}; |
| 530 SkScalar radius = random->nextUScalar1(); | 530 SkScalar radius = random->nextUScalar1(); |
| 531 | 531 |
| 532 SkColor colors[kMaxRandomGradientColors]; | 532 SkColor colors[kMaxRandomGradientColors]; |
| 533 SkScalar stopsArray[kMaxRandomGradientColors]; | 533 SkScalar stopsArray[kMaxRandomGradientColors]; |
| 534 SkScalar* stops = stopsArray; | 534 SkScalar* stops = stopsArray; |
| 535 SkShader::TileMode tm; | 535 SkShader::TileMode tm; |
| 536 int colorCount = RandomGradientParams(random, colors, &stops, &tm); | 536 int colorCount = RandomGradientParams(random, colors, &stops, &tm); |
| 537 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateRadial(center, radius, | 537 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateRadial(center, radius, |
| 538 colors, stops,
colorCount, | 538 colors, stops,
colorCount, |
| 539 tm)); | 539 tm)); |
| 540 SkPaint paint; | 540 SkPaint paint; |
| 541 GrColor grColor; | 541 GrColor paintColor; |
| 542 GrEffectRef* effect; | 542 GrEffect* effect; |
| 543 shader->asNewEffect(context, paint, NULL, &grColor, &effect); | 543 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec
t)); |
| 544 return effect; | 544 return effect; |
| 545 } | 545 } |
| 546 | 546 |
| 547 ///////////////////////////////////////////////////////////////////// | 547 ///////////////////////////////////////////////////////////////////// |
| 548 | 548 |
| 549 void GrGLRadialGradient::emitCode(GrGLShaderBuilder* builder, | 549 void GrGLRadialGradient::emitCode(GrGLShaderBuilder* builder, |
| 550 const GrDrawEffect&, | 550 const GrDrawEffect&, |
| 551 EffectKey key, | 551 EffectKey key, |
| 552 const char* outputColor, | 552 const char* outputColor, |
| 553 const char* inputColor, | 553 const char* inputColor, |
| 554 const TransformedCoordsArray& coords, | 554 const TransformedCoordsArray& coords, |
| 555 const TextureSamplerArray& samplers) { | 555 const TextureSamplerArray& samplers) { |
| 556 this->emitUniforms(builder, key); | 556 this->emitUniforms(builder, key); |
| 557 SkString t("length("); | 557 SkString t("length("); |
| 558 t.append(builder->ensureFSCoords2D(coords, 0)); | 558 t.append(builder->ensureFSCoords2D(coords, 0)); |
| 559 t.append(")"); | 559 t.append(")"); |
| 560 this->emitColor(builder, t.c_str(), key, outputColor, inputColor, samplers); | 560 this->emitColor(builder, t.c_str(), key, outputColor, inputColor, samplers); |
| 561 } | 561 } |
| 562 | 562 |
| 563 ///////////////////////////////////////////////////////////////////// | 563 ///////////////////////////////////////////////////////////////////// |
| 564 | 564 |
| 565 bool SkRadialGradient::asNewEffect(GrContext* context, const SkPaint& paint, | 565 bool SkRadialGradient::asNewEffect(GrContext* context, const SkPaint& paint, |
| 566 const SkMatrix* localMatrix, GrColor* grColor
, | 566 const SkMatrix* localMatrix, GrColor* paintCo
lor, |
| 567 GrEffectRef** grEffect) const { | 567 GrEffect** effect) const { |
| 568 SkASSERT(NULL != context); | 568 SkASSERT(NULL != context); |
| 569 | 569 |
| 570 SkMatrix matrix; | 570 SkMatrix matrix; |
| 571 if (!this->getLocalMatrix().invert(&matrix)) { | 571 if (!this->getLocalMatrix().invert(&matrix)) { |
| 572 return false; | 572 return false; |
| 573 } | 573 } |
| 574 if (localMatrix) { | 574 if (localMatrix) { |
| 575 SkMatrix inv; | 575 SkMatrix inv; |
| 576 if (!localMatrix->invert(&inv)) { | 576 if (!localMatrix->invert(&inv)) { |
| 577 return false; | 577 return false; |
| 578 } | 578 } |
| 579 matrix.postConcat(inv); | 579 matrix.postConcat(inv); |
| 580 } | 580 } |
| 581 matrix.postConcat(fPtsToUnit); | 581 matrix.postConcat(fPtsToUnit); |
| 582 | 582 |
| 583 *grColor = SkColor2GrColorJustAlpha(paint.getColor()); | 583 *paintColor = SkColor2GrColorJustAlpha(paint.getColor()); |
| 584 *grEffect = GrRadialGradient::Create(context, *this, matrix, fTileMode); | 584 *effect = GrRadialGradient::Create(context, *this, matrix, fTileMode); |
| 585 | 585 |
| 586 return true; | 586 return true; |
| 587 } | 587 } |
| 588 | 588 |
| 589 #else | 589 #else |
| 590 | 590 |
| 591 bool SkRadialGradient::asNewEffect(GrContext* context, const SkPaint& paint, | 591 bool SkRadialGradient::asNewEffect(GrContext* context, const SkPaint& paint, |
| 592 const SkMatrix* localMatrix, GrColor* grColor
, | 592 const SkMatrix* localMatrix, GrColor* paintCo
lor, |
| 593 GrEffect** grEffect) const { | 593 GrEffect** effect) const { |
| 594 SkDEBUGFAIL("Should not call in GPU-less build"); | 594 SkDEBUGFAIL("Should not call in GPU-less build"); |
| 595 return false; | 595 return false; |
| 596 } | 596 } |
| 597 | 597 |
| 598 #endif | 598 #endif |
| 599 | 599 |
| 600 #ifndef SK_IGNORE_TO_STRING | 600 #ifndef SK_IGNORE_TO_STRING |
| 601 void SkRadialGradient::toString(SkString* str) const { | 601 void SkRadialGradient::toString(SkString* str) const { |
| 602 str->append("SkRadialGradient: ("); | 602 str->append("SkRadialGradient: ("); |
| 603 | 603 |
| 604 str->append("center: ("); | 604 str->append("center: ("); |
| 605 str->appendScalar(fCenter.fX); | 605 str->appendScalar(fCenter.fX); |
| 606 str->append(", "); | 606 str->append(", "); |
| 607 str->appendScalar(fCenter.fY); | 607 str->appendScalar(fCenter.fY); |
| 608 str->append(") radius: "); | 608 str->append(") radius: "); |
| 609 str->appendScalar(fRadius); | 609 str->appendScalar(fRadius); |
| 610 str->append(" "); | 610 str->append(" "); |
| 611 | 611 |
| 612 this->INHERITED::toString(str); | 612 this->INHERITED::toString(str); |
| 613 | 613 |
| 614 str->append(")"); | 614 str->append(")"); |
| 615 } | 615 } |
| 616 #endif | 616 #endif |
| OLD | NEW |