Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(438)

Side by Side Diff: src/effects/gradients/SkLinearGradient.cpp

Issue 1225923010: Refugee from Dead Machine 4: MDB Monster Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Last update from dead machine Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/gradients/SkLinearGradient.h ('k') | src/effects/gradients/SkRadialGradient.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkLinearGradient.h" 8 #include "SkLinearGradient.h"
9 9
10 static inline int repeat_bits(int x, const int bits) { 10 static inline int repeat_bits(int x, const int bits) {
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 }; 463 };
464 464
465 ///////////////////////////////////////////////////////////////////// 465 /////////////////////////////////////////////////////////////////////
466 466
467 class GrLinearGradient : public GrGradientEffect { 467 class GrLinearGradient : public GrGradientEffect {
468 public: 468 public:
469 469
470 static GrFragmentProcessor* Create(GrContext* ctx, 470 static GrFragmentProcessor* Create(GrContext* ctx,
471 const SkLinearGradient& shader, 471 const SkLinearGradient& shader,
472 const SkMatrix& matrix, 472 const SkMatrix& matrix,
473 SkShader::TileMode tm) { 473 SkShader::TileMode tm, GrRenderTarget* ds t) {
474 return new GrLinearGradient(ctx, shader, matrix, tm); 474 return new GrLinearGradient(ctx, shader, matrix, tm, dst);
475 } 475 }
476 476
477 virtual ~GrLinearGradient() { } 477 virtual ~GrLinearGradient() { }
478 478
479 const char* name() const override { return "Linear Gradient"; } 479 const char* name() const override { return "Linear Gradient"; }
480 480
481 private: 481 private:
482 GrLinearGradient(GrContext* ctx, 482 GrLinearGradient(GrContext* ctx,
483 const SkLinearGradient& shader, 483 const SkLinearGradient& shader,
484 const SkMatrix& matrix, 484 const SkMatrix& matrix,
485 SkShader::TileMode tm) 485 SkShader::TileMode tm, GrRenderTarget* dst)
486 : INHERITED(ctx, shader, matrix, tm) { 486 : INHERITED(ctx, shader, matrix, tm, dst) {
487 this->initClassID<GrLinearGradient>(); 487 this->initClassID<GrLinearGradient>();
488 } 488 }
489 489
490 GrGLFragmentProcessor* onCreateGLInstance() const override { 490 GrGLFragmentProcessor* onCreateGLInstance() const override {
491 return new GrGLLinearGradient(*this); 491 return new GrGLLinearGradient(*this);
492 } 492 }
493 493
494 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, 494 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps,
495 GrProcessorKeyBuilder* b) const override { 495 GrProcessorKeyBuilder* b) const override {
496 GrGLLinearGradient::GenKey(*this, caps, b); 496 GrGLLinearGradient::GenKey(*this, caps, b);
(...skipping 14 matching lines...) Expand all
511 511
512 SkColor colors[kMaxRandomGradientColors]; 512 SkColor colors[kMaxRandomGradientColors];
513 SkScalar stopsArray[kMaxRandomGradientColors]; 513 SkScalar stopsArray[kMaxRandomGradientColors];
514 SkScalar* stops = stopsArray; 514 SkScalar* stops = stopsArray;
515 SkShader::TileMode tm; 515 SkShader::TileMode tm;
516 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); 516 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm);
517 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear(points, 517 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear(points,
518 colors, stops, colorCount, 518 colors, stops, colorCount,
519 tm)); 519 tm));
520 const GrFragmentProcessor* fp = shader->asFragmentProcessor(d->fContext, 520 const GrFragmentProcessor* fp = shader->asFragmentProcessor(d->fContext,
521 GrTest::TestMatrix(d->fRandom), NULL, kNone_SkFilterQuality); 521 GrTest::TestMatrix(d->fRandom), NULL, kNone_SkFilterQuality, NULL);
522 GrAlwaysAssert(fp); 522 GrAlwaysAssert(fp);
523 return fp; 523 return fp;
524 } 524 }
525 525
526 ///////////////////////////////////////////////////////////////////// 526 /////////////////////////////////////////////////////////////////////
527 527
528 void GrGLLinearGradient::emitCode(EmitArgs& args) { 528 void GrGLLinearGradient::emitCode(EmitArgs& args) {
529 const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>(); 529 const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>();
530 this->emitUniforms(args.fBuilder, ge); 530 this->emitUniforms(args.fBuilder, ge);
531 SkString t = args.fBuilder->getFragmentShaderBuilder()->ensureFSCoords2D(arg s.fCoords, 0); 531 SkString t = args.fBuilder->getFragmentShaderBuilder()->ensureFSCoords2D(arg s.fCoords, 0);
532 t.append(".x"); 532 t.append(".x");
533 this->emitColor(args.fBuilder, ge, t.c_str(), args.fOutputColor, args.fInput Color, 533 this->emitColor(args.fBuilder, ge, t.c_str(), args.fOutputColor, args.fInput Color,
534 args.fSamplers); 534 args.fSamplers);
535 } 535 }
536 536
537 ///////////////////////////////////////////////////////////////////// 537 /////////////////////////////////////////////////////////////////////
538 538
539 const GrFragmentProcessor* SkLinearGradient::asFragmentProcessor( 539 const GrFragmentProcessor* SkLinearGradient::asFragmentProcessor(
540 GrContext* context, 540 GrContext* context,
541 const SkMatrix& viewm, 541 const SkMatrix& viewm,
542 const SkMatrix* localMatrix, 542 const SkMatrix* localMatrix,
543 SkFilterQuality) const { 543 SkFilterQuality,
544 GrRenderTarget* dst) const {
544 SkASSERT(context); 545 SkASSERT(context);
545 546
546 SkMatrix matrix; 547 SkMatrix matrix;
547 if (!this->getLocalMatrix().invert(&matrix)) { 548 if (!this->getLocalMatrix().invert(&matrix)) {
548 return nullptr; 549 return nullptr;
549 } 550 }
550 if (localMatrix) { 551 if (localMatrix) {
551 SkMatrix inv; 552 SkMatrix inv;
552 if (!localMatrix->invert(&inv)) { 553 if (!localMatrix->invert(&inv)) {
553 return nullptr; 554 return nullptr;
554 } 555 }
555 matrix.postConcat(inv); 556 matrix.postConcat(inv);
556 } 557 }
557 matrix.postConcat(fPtsToUnit); 558 matrix.postConcat(fPtsToUnit);
558 559
559 SkAutoTUnref<const GrFragmentProcessor> inner( 560 SkAutoTUnref<const GrFragmentProcessor> inner(
560 GrLinearGradient::Create(context, *this, matrix, fTileMode)); 561 GrLinearGradient::Create(context, *this, matrix, fTileMode, dst));
561 return GrFragmentProcessor::MulOutputByInputAlpha(inner); 562 return GrFragmentProcessor::MulOutputByInputAlpha(inner);
562 } 563 }
563 564
564
565 #endif 565 #endif
566 566
567 #ifndef SK_IGNORE_TO_STRING 567 #ifndef SK_IGNORE_TO_STRING
568 void SkLinearGradient::toString(SkString* str) const { 568 void SkLinearGradient::toString(SkString* str) const {
569 str->append("SkLinearGradient ("); 569 str->append("SkLinearGradient (");
570 570
571 str->appendf("start: (%f, %f)", fStart.fX, fStart.fY); 571 str->appendf("start: (%f, %f)", fStart.fX, fStart.fY);
572 str->appendf(" end: (%f, %f) ", fEnd.fX, fEnd.fY); 572 str->appendf(" end: (%f, %f) ", fEnd.fX, fEnd.fY);
573 573
574 this->INHERITED::toString(str); 574 this->INHERITED::toString(str);
575 575
576 str->append(")"); 576 str->append(")");
577 } 577 }
578 #endif 578 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkLinearGradient.h ('k') | src/effects/gradients/SkRadialGradient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698