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

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

Issue 22854005: GPU Gradients (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: remove dead line of code Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
1
2 /* 1 /*
3 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
4 * 3 *
5 * 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
6 * found in the LICENSE file. 5 * found in the LICENSE file.
7 */ 6 */
8 7
9 #include "SkTwoPointConicalGradient.h" 8 #include "SkTwoPointConicalGradient.h"
10 9
11 static int valid_divide(float numer, float denom, float* ratio) { 10 static int valid_divide(float numer, float denom, float* ratio) {
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 const GrDrawEffect&, 487 const GrDrawEffect&,
489 EffectKey key, 488 EffectKey key,
490 const char* outputColor, 489 const char* outputColor,
491 const char* inputColor, 490 const char* inputColor,
492 const TextureSamplerArray& samplers) { 491 const TextureSamplerArray& samplers) {
493 SkString fsCoords; 492 SkString fsCoords;
494 SkString vsCoordsVarying; 493 SkString vsCoordsVarying;
495 GrSLType coordsVaryingType; 494 GrSLType coordsVaryingType;
496 this->setupMatrix(builder, key, &fsCoords, &vsCoordsVarying, &coordsVaryingT ype); 495 this->setupMatrix(builder, key, &fsCoords, &vsCoordsVarying, &coordsVaryingT ype);
497 496
498 this->emitYCoordUniform(builder); 497 this->emitUniforms(builder, key);
499 // 2 copies of uniform array, 1 for each of vertex & fragment shader, 498 // 2 copies of uniform array, 1 for each of vertex & fragment shader,
500 // to work around Xoom bug. Doesn't seem to cause performance decrease 499 // to work around Xoom bug. Doesn't seem to cause performance decrease
501 // in test apps, but need to keep an eye on it. 500 // in test apps, but need to keep an eye on it.
502 fVSParamUni = builder->addUniformArray(GrGLShaderBuilder::kVertex_Visibility , 501 fVSParamUni = builder->addUniformArray(GrGLShaderBuilder::kVertex_Visibility ,
503 kFloat_GrSLType, "Conical2VSParams", 6); 502 kFloat_GrSLType, "Conical2VSParams", 6);
504 fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibili ty, 503 fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibili ty,
505 kFloat_GrSLType, "Conical2FSParams", 6); 504 kFloat_GrSLType, "Conical2FSParams", 6);
506 505
507 // For radial gradients without perspective we can pass the linear 506 // For radial gradients without perspective we can pass the linear
508 // part of the quadratic as a varying. 507 // part of the quadratic as a varying.
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 609
611 // so we'll look at the larger one first: 610 // so we'll look at the larger one first:
612 builder->fsCodeAppendf("\t\tfloat %s = max(%s, %s);\n", tName.c_str( ), 611 builder->fsCodeAppendf("\t\tfloat %s = max(%s, %s);\n", tName.c_str( ),
613 r0Name.c_str(), r1Name.c_str()); 612 r0Name.c_str(), r1Name.c_str());
614 613
615 // if r(t) > 0, then we're done; t will be our x coordinate 614 // if r(t) > 0, then we're done; t will be our x coordinate
616 builder->fsCodeAppendf("\t\tif (%s * %s + %s > 0.0) {\n", tName.c_st r(), 615 builder->fsCodeAppendf("\t\tif (%s * %s + %s > 0.0) {\n", tName.c_st r(),
617 p5.c_str(), p3.c_str()); 616 p5.c_str(), p3.c_str());
618 617
619 builder->fsCodeAppend("\t\t"); 618 builder->fsCodeAppend("\t\t");
620 this->emitColorLookup(builder, tName.c_str(), outputColor, inputColo r, samplers[0]); 619 this->emitColor(builder, tName.c_str(), key, outputColor, inputColor , samplers);
621 620
622 // otherwise, if r(t) for the larger root was <= 0, try the other ro ot 621 // otherwise, if r(t) for the larger root was <= 0, try the other ro ot
623 builder->fsCodeAppend("\t\t} else {\n"); 622 builder->fsCodeAppend("\t\t} else {\n");
624 builder->fsCodeAppendf("\t\t\t%s = min(%s, %s);\n", tName.c_str(), 623 builder->fsCodeAppendf("\t\t\t%s = min(%s, %s);\n", tName.c_str(),
625 r0Name.c_str(), r1Name.c_str()); 624 r0Name.c_str(), r1Name.c_str());
626 625
627 // if r(t) > 0 for the smaller root, then t will be our x coordinate 626 // if r(t) > 0 for the smaller root, then t will be our x coordinate
628 builder->fsCodeAppendf("\t\t\tif (%s * %s + %s > 0.0) {\n", 627 builder->fsCodeAppendf("\t\t\tif (%s * %s + %s > 0.0) {\n",
629 tName.c_str(), p5.c_str(), p3.c_str()); 628 tName.c_str(), p5.c_str(), p3.c_str());
630 629
631 builder->fsCodeAppend("\t\t\t"); 630 builder->fsCodeAppend("\t\t\t");
632 this->emitColorLookup(builder, tName.c_str(), outputColor, inputColo r, samplers[0]); 631 this->emitColor(builder, tName.c_str(), key, outputColor, inputColor , samplers);
633 632
634 // end if (r(t) > 0) for smaller root 633 // end if (r(t) > 0) for smaller root
635 builder->fsCodeAppend("\t\t\t}\n"); 634 builder->fsCodeAppend("\t\t\t}\n");
636 // end if (r(t) > 0), else, for larger root 635 // end if (r(t) > 0), else, for larger root
637 builder->fsCodeAppend("\t\t}\n"); 636 builder->fsCodeAppend("\t\t}\n");
638 // end if (discriminant >= 0) 637 // end if (discriminant >= 0)
639 builder->fsCodeAppend("\t}\n"); 638 builder->fsCodeAppend("\t}\n");
640 } else { 639 } else {
641 640
642 // linear case: t = -c/b 641 // linear case: t = -c/b
643 builder->fsCodeAppendf("\tfloat %s = -(%s / %s);\n", tName.c_str(), 642 builder->fsCodeAppendf("\tfloat %s = -(%s / %s);\n", tName.c_str(),
644 cName.c_str(), bVar.c_str()); 643 cName.c_str(), bVar.c_str());
645 644
646 // if r(t) > 0, then t will be the x coordinate 645 // if r(t) > 0, then t will be the x coordinate
647 builder->fsCodeAppendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str( ), 646 builder->fsCodeAppendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str( ),
648 p5.c_str(), p3.c_str()); 647 p5.c_str(), p3.c_str());
649 builder->fsCodeAppend("\t"); 648 builder->fsCodeAppend("\t");
650 this->emitColorLookup(builder, tName.c_str(), outputColor, inputColo r, samplers[0]); 649 this->emitColor(builder, tName.c_str(), key, outputColor, inputColor , samplers);
651 builder->fsCodeAppend("\t}\n"); 650 builder->fsCodeAppend("\t}\n");
652 } 651 }
653 } 652 }
654 } 653 }
655 654
656 void GrGLConical2Gradient::setData(const GrGLUniformManager& uman, 655 void GrGLConical2Gradient::setData(const GrGLUniformManager& uman,
657 const GrDrawEffect& drawEffect) { 656 const GrDrawEffect& drawEffect) {
658 INHERITED::setData(uman, drawEffect); 657 INHERITED::setData(uman, drawEffect);
659 const GrConical2Gradient& data = drawEffect.castEffect<GrConical2Gradient>() ; 658 const GrConical2Gradient& data = drawEffect.castEffect<GrConical2Gradient>() ;
660 SkASSERT(data.isDegenerate() == fIsDegenerate); 659 SkASSERT(data.isDegenerate() == fIsDegenerate);
(...skipping 25 matching lines...) Expand all
686 uman.set1fv(fFSParamUni, 0, 6, values); 685 uman.set1fv(fFSParamUni, 0, 6, values);
687 fCachedCenter = centerX1; 686 fCachedCenter = centerX1;
688 fCachedRadius = radius0; 687 fCachedRadius = radius0;
689 fCachedDiffRadius = diffRadius; 688 fCachedDiffRadius = diffRadius;
690 } 689 }
691 } 690 }
692 691
693 GrGLEffect::EffectKey GrGLConical2Gradient::GenKey(const GrDrawEffect& drawEffec t, 692 GrGLEffect::EffectKey GrGLConical2Gradient::GenKey(const GrDrawEffect& drawEffec t,
694 const GrGLCaps&) { 693 const GrGLCaps&) {
695 enum { 694 enum {
696 kIsDegenerate = 1 << kMatrixKeyBitCnt, 695 kIsDegenerate = 1 << kBaseKeyBitCnt,
697 }; 696 };
698 697
699 EffectKey key = GenMatrixKey(drawEffect); 698 EffectKey key = GenBaseGradientKey(drawEffect);
700 if (drawEffect.castEffect<GrConical2Gradient>().isDegenerate()) { 699 if (drawEffect.castEffect<GrConical2Gradient>().isDegenerate()) {
701 key |= kIsDegenerate; 700 key |= kIsDegenerate;
702 } 701 }
703 return key; 702 return key;
704 } 703 }
705 704
706 ///////////////////////////////////////////////////////////////////// 705 /////////////////////////////////////////////////////////////////////
707 706
708 GrEffectRef* SkTwoPointConicalGradient::asNewEffect(GrContext* context, const Sk Paint&) const { 707 GrEffectRef* SkTwoPointConicalGradient::asNewEffect(GrContext* context, const Sk Paint&) const {
709 SkASSERT(NULL != context); 708 SkASSERT(NULL != context);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 str->appendScalar(fCenter2.fY); 754 str->appendScalar(fCenter2.fY);
756 str->append(") radius2: "); 755 str->append(") radius2: ");
757 str->appendScalar(fRadius2); 756 str->appendScalar(fRadius2);
758 str->append(" "); 757 str->append(" ");
759 758
760 this->INHERITED::toString(str); 759 this->INHERITED::toString(str);
761 760
762 str->append(")"); 761 str->append(")");
763 } 762 }
764 #endif 763 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkSweepGradient.cpp ('k') | src/effects/gradients/SkTwoPointRadialGradient.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698