| 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 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 dstX += SK_Scalar1; | 408 dstX += SK_Scalar1; |
| 409 } while (--count != 0); | 409 } while (--count != 0); |
| 410 } | 410 } |
| 411 } | 411 } |
| 412 | 412 |
| 413 ///////////////////////////////////////////////////////////////////// | 413 ///////////////////////////////////////////////////////////////////// |
| 414 | 414 |
| 415 #if SK_SUPPORT_GPU | 415 #if SK_SUPPORT_GPU |
| 416 | 416 |
| 417 #include "SkGr.h" | 417 #include "SkGr.h" |
| 418 #include "effects/GrExtractAlphaFragmentProcessor.h" | |
| 419 #include "gl/builders/GrGLProgramBuilder.h" | 418 #include "gl/builders/GrGLProgramBuilder.h" |
| 420 | 419 |
| 421 class GrGLRadialGradient : public GrGLGradientEffect { | 420 class GrGLRadialGradient : public GrGLGradientEffect { |
| 422 public: | 421 public: |
| 423 | 422 |
| 424 GrGLRadialGradient(const GrProcessor&) {} | 423 GrGLRadialGradient(const GrProcessor&) {} |
| 425 virtual ~GrGLRadialGradient() { } | 424 virtual ~GrGLRadialGradient() { } |
| 426 | 425 |
| 427 virtual void emitCode(EmitArgs&) override; | 426 virtual void emitCode(EmitArgs&) override; |
| 428 | 427 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 | 472 |
| 474 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 473 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
| 475 | 474 |
| 476 typedef GrGradientEffect INHERITED; | 475 typedef GrGradientEffect INHERITED; |
| 477 }; | 476 }; |
| 478 | 477 |
| 479 ///////////////////////////////////////////////////////////////////// | 478 ///////////////////////////////////////////////////////////////////// |
| 480 | 479 |
| 481 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRadialGradient); | 480 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRadialGradient); |
| 482 | 481 |
| 483 const GrFragmentProcessor* GrRadialGradient::TestCreate(GrProcessorTestData* d)
{ | 482 GrFragmentProcessor* GrRadialGradient::TestCreate(GrProcessorTestData* d) { |
| 484 SkPoint center = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; | 483 SkPoint center = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; |
| 485 SkScalar radius = d->fRandom->nextUScalar1(); | 484 SkScalar radius = d->fRandom->nextUScalar1(); |
| 486 | 485 |
| 487 SkColor colors[kMaxRandomGradientColors]; | 486 SkColor colors[kMaxRandomGradientColors]; |
| 488 SkScalar stopsArray[kMaxRandomGradientColors]; | 487 SkScalar stopsArray[kMaxRandomGradientColors]; |
| 489 SkScalar* stops = stopsArray; | 488 SkScalar* stops = stopsArray; |
| 490 SkShader::TileMode tm; | 489 SkShader::TileMode tm; |
| 491 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); | 490 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); |
| 492 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateRadial(center, radius, | 491 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateRadial(center, radius, |
| 493 colors, stops,
colorCount, | 492 colors, stops,
colorCount, |
| 494 tm)); | 493 tm)); |
| 495 const GrFragmentProcessor* fp = shader->asFragmentProcessor(d->fContext, | 494 SkPaint paint; |
| 496 GrTest::TestMatrix(d->fRandom), NULL, kNone_SkFilterQuality, d->fProcDat
aManager); | 495 GrColor paintColor; |
| 497 GrAlwaysAssert(fp); | 496 GrFragmentProcessor* fp; |
| 497 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, |
| 498 GrTest::TestMatrix(d->fRandom), n
ullptr, |
| 499 &paintColor, d->fProcDataManager,
&fp)); |
| 498 return fp; | 500 return fp; |
| 499 } | 501 } |
| 500 | 502 |
| 501 ///////////////////////////////////////////////////////////////////// | 503 ///////////////////////////////////////////////////////////////////// |
| 502 | 504 |
| 503 void GrGLRadialGradient::emitCode(EmitArgs& args) { | 505 void GrGLRadialGradient::emitCode(EmitArgs& args) { |
| 504 const GrRadialGradient& ge = args.fFp.cast<GrRadialGradient>(); | 506 const GrRadialGradient& ge = args.fFp.cast<GrRadialGradient>(); |
| 505 this->emitUniforms(args.fBuilder, ge); | 507 this->emitUniforms(args.fBuilder, ge); |
| 506 SkString t("length("); | 508 SkString t("length("); |
| 507 t.append(args.fBuilder->getFragmentShaderBuilder()->ensureFSCoords2D(args.fC
oords, 0)); | 509 t.append(args.fBuilder->getFragmentShaderBuilder()->ensureFSCoords2D(args.fC
oords, 0)); |
| 508 t.append(")"); | 510 t.append(")"); |
| 509 this->emitColor(args.fBuilder, ge, t.c_str(), args.fOutputColor, args.fInput
Color, | 511 this->emitColor(args.fBuilder, ge, t.c_str(), args.fOutputColor, args.fInput
Color, |
| 510 args.fSamplers); | 512 args.fSamplers); |
| 511 } | 513 } |
| 512 | 514 |
| 513 ///////////////////////////////////////////////////////////////////// | 515 ///////////////////////////////////////////////////////////////////// |
| 514 | 516 |
| 515 const GrFragmentProcessor* SkRadialGradient::asFragmentProcessor(GrContext* cont
ext, | 517 bool SkRadialGradient::asFragmentProcessor(GrContext* context, const SkPaint& pa
int, |
| 516 const SkMatrix& viewM, const SkMatrix* localMatrix, SkFilterQuality, | 518 const SkMatrix& viewM, |
| 517 GrProcessorDataManager* procDataManager) const { | 519 const SkMatrix* localMatrix, GrColor*
paintColor, |
| 520 GrProcessorDataManager* procDataManag
er, |
| 521 GrFragmentProcessor** fp) const { |
| 518 SkASSERT(context); | 522 SkASSERT(context); |
| 519 | 523 |
| 520 SkMatrix matrix; | 524 SkMatrix matrix; |
| 521 if (!this->getLocalMatrix().invert(&matrix)) { | 525 if (!this->getLocalMatrix().invert(&matrix)) { |
| 522 return nullptr; | 526 return false; |
| 523 } | 527 } |
| 524 if (localMatrix) { | 528 if (localMatrix) { |
| 525 SkMatrix inv; | 529 SkMatrix inv; |
| 526 if (!localMatrix->invert(&inv)) { | 530 if (!localMatrix->invert(&inv)) { |
| 527 return nullptr; | 531 return false; |
| 528 } | 532 } |
| 529 matrix.postConcat(inv); | 533 matrix.postConcat(inv); |
| 530 } | 534 } |
| 531 matrix.postConcat(fPtsToUnit); | 535 matrix.postConcat(fPtsToUnit); |
| 532 SkAutoTUnref<const GrFragmentProcessor> inner( | 536 |
| 533 GrRadialGradient::Create(context, procDataManager, *this, matrix, fT
ileMode)); | 537 *paintColor = SkColor2GrColorJustAlpha(paint.getColor()); |
| 534 return GrExtractAlphaFragmentProcessor::Create(inner); | 538 *fp = GrRadialGradient::Create(context, procDataManager, *this, matrix, fTil
eMode); |
| 539 |
| 540 return true; |
| 541 } |
| 542 |
| 543 #else |
| 544 |
| 545 bool SkRadialGradient::asFragmentProcessor(GrContext*, const SkPaint&, const SkM
atrix&, |
| 546 const SkMatrix*, GrColor*, GrProcesso
rDataManager*, |
| 547 GrFragmentProcessor**) const { |
| 548 SkDEBUGFAIL("Should not call in GPU-less build"); |
| 549 return false; |
| 535 } | 550 } |
| 536 | 551 |
| 537 #endif | 552 #endif |
| 538 | 553 |
| 539 #ifndef SK_IGNORE_TO_STRING | 554 #ifndef SK_IGNORE_TO_STRING |
| 540 void SkRadialGradient::toString(SkString* str) const { | 555 void SkRadialGradient::toString(SkString* str) const { |
| 541 str->append("SkRadialGradient: ("); | 556 str->append("SkRadialGradient: ("); |
| 542 | 557 |
| 543 str->append("center: ("); | 558 str->append("center: ("); |
| 544 str->appendScalar(fCenter.fX); | 559 str->appendScalar(fCenter.fX); |
| 545 str->append(", "); | 560 str->append(", "); |
| 546 str->appendScalar(fCenter.fY); | 561 str->appendScalar(fCenter.fY); |
| 547 str->append(") radius: "); | 562 str->append(") radius: "); |
| 548 str->appendScalar(fRadius); | 563 str->appendScalar(fRadius); |
| 549 str->append(" "); | 564 str->append(" "); |
| 550 | 565 |
| 551 this->INHERITED::toString(str); | 566 this->INHERITED::toString(str); |
| 552 | 567 |
| 553 str->append(")"); | 568 str->append(")"); |
| 554 } | 569 } |
| 555 #endif | 570 #endif |
| OLD | NEW |