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