| 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 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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_Visibility
, | 544 fVSParamUni = builder->addUniformArray(GrGLShaderBuilder::kVertex_Visibility
, |
| 545 kFloat_GrSLType, "Radial2VSParams", 6
); | 545 kFloat_GrSLType, "Radial2VSParams", 6
); |
| 546 fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibili
ty, | 546 fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibili
ty, |
| 547 kFloat_GrSLType, "Radial2FSParams", 6
); | 547 kFloat_GrSLType, "Radial2FSParams", 6
); |
| 548 | 548 |
| 549 // For radial gradients without perspective we can pass the linear | 549 // For radial gradients without perspective we can pass the linear |
| 550 // part of the quadratic as a varying. | 550 // part of the quadratic as a varying. |
| 551 if (kVec2f_GrSLType == coordsVaryingType) { | 551 GrGLShaderBuilder::VertexBuilder* vertexBuilder = |
| 552 builder->addVarying(kFloat_GrSLType, "Radial2BCoeff", &fVSVaryingName, &
fFSVaryingName); | 552 (kVec2f_GrSLType == coordsVaryingType) ? builder->getVertexBuilder() : N
ULL; |
| 553 if (NULL != vertexBuilder) { |
| 554 vertexBuilder->addVarying(kFloat_GrSLType, "Radial2BCoeff", |
| 555 &fVSVaryingName, &fFSVaryingName); |
| 553 } | 556 } |
| 554 | 557 |
| 555 // VS | 558 // VS |
| 556 { | 559 { |
| 557 SkString p2; | 560 SkString p2; |
| 558 SkString p3; | 561 SkString p3; |
| 559 builder->getUniformVariable(fVSParamUni).appendArrayAccess(2, &p2); | 562 builder->getUniformVariable(fVSParamUni).appendArrayAccess(2, &p2); |
| 560 builder->getUniformVariable(fVSParamUni).appendArrayAccess(3, &p3); | 563 builder->getUniformVariable(fVSParamUni).appendArrayAccess(3, &p3); |
| 561 | 564 |
| 562 // For radial gradients without perspective we can pass the linear | 565 // For radial gradients without perspective we can pass the linear |
| 563 // part of the quadratic as a varying. | 566 // part of the quadratic as a varying. |
| 564 if (kVec2f_GrSLType == coordsVaryingType) { | 567 if (NULL != vertexBuilder) { |
| 565 // r2Var = 2 * (r2Parm[2] * varCoord.x - r2Param[3]) | 568 // r2Var = 2 * (r2Parm[2] * varCoord.x - r2Param[3]) |
| 566 builder->vsCodeAppendf("\t%s = 2.0 *(%s * %s.x - %s);\n", | 569 vertexBuilder->vsCodeAppendf("\t%s = 2.0 *(%s * %s.x - %s);\n", |
| 567 fVSVaryingName, p2.c_str(), | 570 fVSVaryingName, p2.c_str(), |
| 568 vsCoordsVarying.c_str(), p3.c_str()); | 571 vsCoordsVarying.c_str(), p3.c_str()); |
| 569 } | 572 } |
| 570 } | 573 } |
| 571 | 574 |
| 572 // FS | 575 // FS |
| 573 { | 576 { |
| 574 SkString cName("c"); | 577 SkString cName("c"); |
| 575 SkString ac4Name("ac4"); | 578 SkString ac4Name("ac4"); |
| 576 SkString rootName("root"); | 579 SkString rootName("root"); |
| 577 SkString t; | 580 SkString t; |
| 578 SkString p0; | 581 SkString p0; |
| 579 SkString p1; | 582 SkString p1; |
| 580 SkString p2; | 583 SkString p2; |
| 581 SkString p3; | 584 SkString p3; |
| 582 SkString p4; | 585 SkString p4; |
| 583 SkString p5; | 586 SkString p5; |
| 584 builder->getUniformVariable(fFSParamUni).appendArrayAccess(0, &p0); | 587 builder->getUniformVariable(fFSParamUni).appendArrayAccess(0, &p0); |
| 585 builder->getUniformVariable(fFSParamUni).appendArrayAccess(1, &p1); | 588 builder->getUniformVariable(fFSParamUni).appendArrayAccess(1, &p1); |
| 586 builder->getUniformVariable(fFSParamUni).appendArrayAccess(2, &p2); | 589 builder->getUniformVariable(fFSParamUni).appendArrayAccess(2, &p2); |
| 587 builder->getUniformVariable(fFSParamUni).appendArrayAccess(3, &p3); | 590 builder->getUniformVariable(fFSParamUni).appendArrayAccess(3, &p3); |
| 588 builder->getUniformVariable(fFSParamUni).appendArrayAccess(4, &p4); | 591 builder->getUniformVariable(fFSParamUni).appendArrayAccess(4, &p4); |
| 589 builder->getUniformVariable(fFSParamUni).appendArrayAccess(5, &p5); | 592 builder->getUniformVariable(fFSParamUni).appendArrayAccess(5, &p5); |
| 590 | 593 |
| 591 // If we we're able to interpolate the linear component, | 594 // If we we're able to interpolate the linear component, |
| 592 // bVar is the varying; otherwise compute it | 595 // bVar is the varying; otherwise compute it |
| 593 SkString bVar; | 596 SkString bVar; |
| 594 if (kVec2f_GrSLType == coordsVaryingType) { | 597 if (NULL != vertexBuilder) { |
| 595 bVar = fFSVaryingName; | 598 bVar = fFSVaryingName; |
| 596 } else { | 599 } else { |
| 597 bVar = "b"; | 600 bVar = "b"; |
| 598 builder->fsCodeAppendf("\tfloat %s = 2.0 * (%s * %s.x - %s);\n", | 601 builder->fsCodeAppendf("\tfloat %s = 2.0 * (%s * %s.x - %s);\n", |
| 599 bVar.c_str(), p2.c_str(), fsCoords.c_str(), p
3.c_str()); | 602 bVar.c_str(), p2.c_str(), fsCoords.c_str(), p
3.c_str()); |
| 600 } | 603 } |
| 601 | 604 |
| 602 // c = (x^2)+(y^2) - params[4] | 605 // c = (x^2)+(y^2) - params[4] |
| 603 builder->fsCodeAppendf("\tfloat %s = dot(%s, %s) - %s;\n", | 606 builder->fsCodeAppendf("\tfloat %s = dot(%s, %s) - %s;\n", |
| 604 cName.c_str(), | 607 cName.c_str(), |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 } | 708 } |
| 706 | 709 |
| 707 #else | 710 #else |
| 708 | 711 |
| 709 GrEffectRef* SkTwoPointRadialGradient::asNewEffect(GrContext*, const SkPaint&) c
onst { | 712 GrEffectRef* SkTwoPointRadialGradient::asNewEffect(GrContext*, const SkPaint&) c
onst { |
| 710 SkDEBUGFAIL("Should not call in GPU-less build"); | 713 SkDEBUGFAIL("Should not call in GPU-less build"); |
| 711 return NULL; | 714 return NULL; |
| 712 } | 715 } |
| 713 | 716 |
| 714 #endif | 717 #endif |
| OLD | NEW |