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(GrContext* cont ext, |
robertphillips
2015/08/28 21:33:06
tabs ?
bsalomon
2015/08/29 01:42:50
Done.
| |
518 const SkMatrix& viewM, | 516 const SkMatrix& viewM, const SkMatrix* localMatrix, SkFilterQuality, |
519 const SkMatrix* localMatrix, GrColor* paintColor, | 517 GrProcessorDataManager* procDataManager) const { |
520 GrProcessorDataManager* procDataManag er, | |
521 GrFragmentProcessor** fp) const { | |
522 SkASSERT(context); | 518 SkASSERT(context); |
523 | 519 |
524 SkMatrix matrix; | 520 SkMatrix matrix; |
525 if (!this->getLocalMatrix().invert(&matrix)) { | 521 if (!this->getLocalMatrix().invert(&matrix)) { |
526 return false; | 522 return nullptr; |
527 } | 523 } |
528 if (localMatrix) { | 524 if (localMatrix) { |
529 SkMatrix inv; | 525 SkMatrix inv; |
530 if (!localMatrix->invert(&inv)) { | 526 if (!localMatrix->invert(&inv)) { |
531 return false; | 527 return nullptr; |
532 } | 528 } |
533 matrix.postConcat(inv); | 529 matrix.postConcat(inv); |
534 } | 530 } |
535 matrix.postConcat(fPtsToUnit); | 531 matrix.postConcat(fPtsToUnit); |
536 | 532 SkAutoTUnref<const GrFragmentProcessor> inner( |
537 *paintColor = SkColor2GrColorJustAlpha(paint.getColor()); | 533 GrRadialGradient::Create(context, procDataManager, *this, matrix, fT ileMode)); |
538 *fp = GrRadialGradient::Create(context, procDataManager, *this, matrix, fTil eMode); | 534 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 } | 535 } |
551 | 536 |
552 #endif | 537 #endif |
553 | 538 |
554 #ifndef SK_IGNORE_TO_STRING | 539 #ifndef SK_IGNORE_TO_STRING |
555 void SkRadialGradient::toString(SkString* str) const { | 540 void SkRadialGradient::toString(SkString* str) const { |
556 str->append("SkRadialGradient: ("); | 541 str->append("SkRadialGradient: ("); |
557 | 542 |
558 str->append("center: ("); | 543 str->append("center: ("); |
559 str->appendScalar(fCenter.fX); | 544 str->appendScalar(fCenter.fX); |
560 str->append(", "); | 545 str->append(", "); |
561 str->appendScalar(fCenter.fY); | 546 str->appendScalar(fCenter.fY); |
562 str->append(") radius: "); | 547 str->append(") radius: "); |
563 str->appendScalar(fRadius); | 548 str->appendScalar(fRadius); |
564 str->append(" "); | 549 str->append(" "); |
565 | 550 |
566 this->INHERITED::toString(str); | 551 this->INHERITED::toString(str); |
567 | 552 |
568 str->append(")"); | 553 str->append(")"); |
569 } | 554 } |
570 #endif | 555 #endif |
OLD | NEW |