| 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 "SkTwoPointRadialGradient.h" | 9 #include "SkTwoPointRadialGradient.h" |
| 10 | 10 |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 } | 526 } |
| 527 | 527 |
| 528 void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder, | 528 void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder, |
| 529 const GrDrawEffect& drawEffect, | 529 const GrDrawEffect& drawEffect, |
| 530 EffectKey key, | 530 EffectKey key, |
| 531 const char* outputColor, | 531 const char* outputColor, |
| 532 const char* inputColor, | 532 const char* inputColor, |
| 533 const TextureSamplerArray& samplers) { | 533 const TextureSamplerArray& samplers) { |
| 534 | 534 |
| 535 this->emitYCoordUniform(builder); | 535 this->emitYCoordUniform(builder); |
| 536 const char* fsCoords; | 536 SkString fsCoords; |
| 537 const char* vsCoordsVarying; | 537 SkString vsCoordsVarying; |
| 538 GrSLType coordsVaryingType; | 538 GrSLType coordsVaryingType; |
| 539 this->setupMatrix(builder, key, &fsCoords, &vsCoordsVarying, &coordsVaryingT
ype); | 539 this->setupMatrix(builder, key, &fsCoords, &vsCoordsVarying, &coordsVaryingT
ype); |
| 540 | 540 |
| 541 // 2 copies of uniform array, 1 for each of vertex & fragment shader, | 541 // 2 copies of uniform array, 1 for each of vertex & fragment shader, |
| 542 // to work around Xoom bug. Doesn't seem to cause performance decrease | 542 // to work around Xoom bug. Doesn't seem to cause performance decrease |
| 543 // in test apps, but need to keep an eye on it. | 543 // in test apps, but need to keep an eye on it. |
| 544 fVSParamUni = builder->addUniformArray(GrGLShaderBuilder::kVertex_ShaderType
, | 544 fVSParamUni = builder->addUniformArray(GrGLShaderBuilder::kVertex_ShaderType
, |
| 545 kFloat_GrSLType, "Radial2VSParams", 6
); | 545 kFloat_GrSLType, "Radial2VSParams", 6
); |
| 546 fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_ShaderTy
pe, | 546 fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_ShaderTy
pe, |
| 547 kFloat_GrSLType, "Radial2FSParams", 6
); | 547 kFloat_GrSLType, "Radial2FSParams", 6
); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 558 SkString p3; | 558 SkString p3; |
| 559 builder->getUniformVariable(fVSParamUni).appendArrayAccess(2, &p2); | 559 builder->getUniformVariable(fVSParamUni).appendArrayAccess(2, &p2); |
| 560 builder->getUniformVariable(fVSParamUni).appendArrayAccess(3, &p3); | 560 builder->getUniformVariable(fVSParamUni).appendArrayAccess(3, &p3); |
| 561 | 561 |
| 562 // For radial gradients without perspective we can pass the linear | 562 // For radial gradients without perspective we can pass the linear |
| 563 // part of the quadratic as a varying. | 563 // part of the quadratic as a varying. |
| 564 if (kVec2f_GrSLType == coordsVaryingType) { | 564 if (kVec2f_GrSLType == coordsVaryingType) { |
| 565 // r2Var = 2 * (r2Parm[2] * varCoord.x - r2Param[3]) | 565 // r2Var = 2 * (r2Parm[2] * varCoord.x - r2Param[3]) |
| 566 builder->vsCodeAppendf("\t%s = 2.0 *(%s * %s.x - %s);\n", | 566 builder->vsCodeAppendf("\t%s = 2.0 *(%s * %s.x - %s);\n", |
| 567 fVSVaryingName, p2.c_str(), | 567 fVSVaryingName, p2.c_str(), |
| 568 vsCoordsVarying, p3.c_str()); | 568 vsCoordsVarying.c_str(), p3.c_str()); |
| 569 } | 569 } |
| 570 } | 570 } |
| 571 | 571 |
| 572 // FS | 572 // FS |
| 573 { | 573 { |
| 574 SkString cName("c"); | 574 SkString cName("c"); |
| 575 SkString ac4Name("ac4"); | 575 SkString ac4Name("ac4"); |
| 576 SkString rootName("root"); | 576 SkString rootName("root"); |
| 577 SkString t; | 577 SkString t; |
| 578 SkString p0; | 578 SkString p0; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 589 builder->getUniformVariable(fFSParamUni).appendArrayAccess(5, &p5); | 589 builder->getUniformVariable(fFSParamUni).appendArrayAccess(5, &p5); |
| 590 | 590 |
| 591 // If we we're able to interpolate the linear component, | 591 // If we we're able to interpolate the linear component, |
| 592 // bVar is the varying; otherwise compute it | 592 // bVar is the varying; otherwise compute it |
| 593 SkString bVar; | 593 SkString bVar; |
| 594 if (kVec2f_GrSLType == coordsVaryingType) { | 594 if (kVec2f_GrSLType == coordsVaryingType) { |
| 595 bVar = fFSVaryingName; | 595 bVar = fFSVaryingName; |
| 596 } else { | 596 } else { |
| 597 bVar = "b"; | 597 bVar = "b"; |
| 598 builder->fsCodeAppendf("\tfloat %s = 2.0 * (%s * %s.x - %s);\n", | 598 builder->fsCodeAppendf("\tfloat %s = 2.0 * (%s * %s.x - %s);\n", |
| 599 bVar.c_str(), p2.c_str(), fsCoords, p3.c_str(
)); | 599 bVar.c_str(), p2.c_str(), fsCoords.c_str(), p
3.c_str()); |
| 600 } | 600 } |
| 601 | 601 |
| 602 // c = (x^2)+(y^2) - params[4] | 602 // c = (x^2)+(y^2) - params[4] |
| 603 builder->fsCodeAppendf("\tfloat %s = dot(%s, %s) - %s;\n", | 603 builder->fsCodeAppendf("\tfloat %s = dot(%s, %s) - %s;\n", |
| 604 cName.c_str(), | 604 cName.c_str(), |
| 605 fsCoords, | 605 fsCoords.c_str(), |
| 606 fsCoords, | 606 fsCoords.c_str(), |
| 607 p4.c_str()); | 607 p4.c_str()); |
| 608 | 608 |
| 609 // If we aren't degenerate, emit some extra code, and accept a slightly | 609 // If we aren't degenerate, emit some extra code, and accept a slightly |
| 610 // more complex coord. | 610 // more complex coord. |
| 611 if (!fIsDegenerate) { | 611 if (!fIsDegenerate) { |
| 612 | 612 |
| 613 // ac4 = 4.0 * params[0] * c | 613 // ac4 = 4.0 * params[0] * c |
| 614 builder->fsCodeAppendf("\tfloat %s = %s * 4.0 * %s;\n", | 614 builder->fsCodeAppendf("\tfloat %s = %s * 4.0 * %s;\n", |
| 615 ac4Name.c_str(), p0.c_str(), | 615 ac4Name.c_str(), p0.c_str(), |
| 616 cName.c_str()); | 616 cName.c_str()); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 } | 705 } |
| 706 | 706 |
| 707 #else | 707 #else |
| 708 | 708 |
| 709 GrEffectRef* SkTwoPointRadialGradient::asNewEffect(GrContext*, const SkPaint&) c
onst { | 709 GrEffectRef* SkTwoPointRadialGradient::asNewEffect(GrContext*, const SkPaint&) c
onst { |
| 710 SkDEBUGFAIL("Should not call in GPU-less build"); | 710 SkDEBUGFAIL("Should not call in GPU-less build"); |
| 711 return NULL; | 711 return NULL; |
| 712 } | 712 } |
| 713 | 713 |
| 714 #endif | 714 #endif |
| OLD | NEW |