| 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 "SkTwoPointConicalGradient.h" | 9 #include "SkTwoPointConicalGradient.h" |
| 10 | 10 |
| (...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 // 2 copies of uniform array, 1 for each of vertex & fragment shader, | 499 // 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 | 500 // to work around Xoom bug. Doesn't seem to cause performance decrease |
| 501 // in test apps, but need to keep an eye on it. | 501 // in test apps, but need to keep an eye on it. |
| 502 fVSParamUni = builder->addUniformArray(GrGLShaderBuilder::kVertex_Visibility
, | 502 fVSParamUni = builder->addUniformArray(GrGLShaderBuilder::kVertex_Visibility
, |
| 503 kFloat_GrSLType, "Conical2VSParams",
6); | 503 kFloat_GrSLType, "Conical2VSParams",
6); |
| 504 fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibili
ty, | 504 fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibili
ty, |
| 505 kFloat_GrSLType, "Conical2FSParams",
6); | 505 kFloat_GrSLType, "Conical2FSParams",
6); |
| 506 | 506 |
| 507 // For radial gradients without perspective we can pass the linear | 507 // For radial gradients without perspective we can pass the linear |
| 508 // part of the quadratic as a varying. | 508 // part of the quadratic as a varying. |
| 509 if (kVec2f_GrSLType == coordsVaryingType) { | 509 GrGLShaderBuilder::VertexBuilder* vertexBuilder = |
| 510 builder->addVarying(kFloat_GrSLType, "Conical2BCoeff", | 510 (kVec2f_GrSLType == coordsVaryingType) ? builder->getVertexBuilder() : N
ULL; |
| 511 &fVSVaryingName, &fFSVaryingName); | 511 if (NULL != vertexBuilder) { |
| 512 vertexBuilder->addVarying(kFloat_GrSLType, "Conical2BCoeff", |
| 513 &fVSVaryingName, &fFSVaryingName); |
| 512 } | 514 } |
| 513 | 515 |
| 514 // VS | 516 // VS |
| 515 { | 517 { |
| 516 SkString p2; // distance between centers | 518 SkString p2; // distance between centers |
| 517 SkString p3; // start radius | 519 SkString p3; // start radius |
| 518 SkString p5; // difference in radii (r1 - r0) | 520 SkString p5; // difference in radii (r1 - r0) |
| 519 builder->getUniformVariable(fVSParamUni).appendArrayAccess(2, &p2); | 521 builder->getUniformVariable(fVSParamUni).appendArrayAccess(2, &p2); |
| 520 builder->getUniformVariable(fVSParamUni).appendArrayAccess(3, &p3); | 522 builder->getUniformVariable(fVSParamUni).appendArrayAccess(3, &p3); |
| 521 builder->getUniformVariable(fVSParamUni).appendArrayAccess(5, &p5); | 523 builder->getUniformVariable(fVSParamUni).appendArrayAccess(5, &p5); |
| 522 | 524 |
| 523 // For radial gradients without perspective we can pass the linear | 525 // For radial gradients without perspective we can pass the linear |
| 524 // part of the quadratic as a varying. | 526 // part of the quadratic as a varying. |
| 525 if (kVec2f_GrSLType == coordsVaryingType) { | 527 if (NULL != vertexBuilder) { |
| 526 // r2Var = -2 * (r2Parm[2] * varCoord.x - r2Param[3] * r2Param[5]) | 528 // r2Var = -2 * (r2Parm[2] * varCoord.x - r2Param[3] * r2Param[5]) |
| 527 builder->vsCodeAppendf("\t%s = -2.0 * (%s * %s.x + %s * %s);\n", | 529 vertexBuilder->vsCodeAppendf("\t%s = -2.0 * (%s * %s.x + %s * %s);\n
", |
| 528 fVSVaryingName, p2.c_str(), | 530 fVSVaryingName, p2.c_str(), |
| 529 vsCoordsVarying.c_str(), p3.c_str(), p5.c_str
()); | 531 vsCoordsVarying.c_str(), p3.c_str(),
p5.c_str()); |
| 530 } | 532 } |
| 531 } | 533 } |
| 532 | 534 |
| 533 // FS | 535 // FS |
| 534 { | 536 { |
| 535 | 537 |
| 536 SkString cName("c"); | 538 SkString cName("c"); |
| 537 SkString ac4Name("ac4"); | 539 SkString ac4Name("ac4"); |
| 538 SkString dName("d"); | 540 SkString dName("d"); |
| 539 SkString qName("q"); | 541 SkString qName("q"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 550 builder->getUniformVariable(fFSParamUni).appendArrayAccess(0, &p0); | 552 builder->getUniformVariable(fFSParamUni).appendArrayAccess(0, &p0); |
| 551 builder->getUniformVariable(fFSParamUni).appendArrayAccess(1, &p1); | 553 builder->getUniformVariable(fFSParamUni).appendArrayAccess(1, &p1); |
| 552 builder->getUniformVariable(fFSParamUni).appendArrayAccess(2, &p2); | 554 builder->getUniformVariable(fFSParamUni).appendArrayAccess(2, &p2); |
| 553 builder->getUniformVariable(fFSParamUni).appendArrayAccess(3, &p3); | 555 builder->getUniformVariable(fFSParamUni).appendArrayAccess(3, &p3); |
| 554 builder->getUniformVariable(fFSParamUni).appendArrayAccess(4, &p4); | 556 builder->getUniformVariable(fFSParamUni).appendArrayAccess(4, &p4); |
| 555 builder->getUniformVariable(fFSParamUni).appendArrayAccess(5, &p5); | 557 builder->getUniformVariable(fFSParamUni).appendArrayAccess(5, &p5); |
| 556 | 558 |
| 557 // If we we're able to interpolate the linear component, | 559 // If we we're able to interpolate the linear component, |
| 558 // bVar is the varying; otherwise compute it | 560 // bVar is the varying; otherwise compute it |
| 559 SkString bVar; | 561 SkString bVar; |
| 560 if (kVec2f_GrSLType == coordsVaryingType) { | 562 if (NULL != vertexBuilder) { |
| 561 bVar = fFSVaryingName; | 563 bVar = fFSVaryingName; |
| 562 } else { | 564 } else { |
| 563 bVar = "b"; | 565 bVar = "b"; |
| 564 builder->fsCodeAppendf("\tfloat %s = -2.0 * (%s * %s.x + %s * %s);\n
", | 566 builder->fsCodeAppendf("\tfloat %s = -2.0 * (%s * %s.x + %s * %s);\n
", |
| 565 bVar.c_str(), p2.c_str(), fsCoords.c_str(), | 567 bVar.c_str(), p2.c_str(), fsCoords.c_str(), |
| 566 p3.c_str(), p5.c_str()); | 568 p3.c_str(), p5.c_str()); |
| 567 } | 569 } |
| 568 | 570 |
| 569 // output will default to transparent black (we simply won't write anyth
ing | 571 // output will default to transparent black (we simply won't write anyth
ing |
| 570 // else to it if invalid, instead of discarding or returning prematurely
) | 572 // else to it if invalid, instead of discarding or returning prematurely
) |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 str->appendScalar(fCenter2.fY); | 755 str->appendScalar(fCenter2.fY); |
| 754 str->append(") radius2: "); | 756 str->append(") radius2: "); |
| 755 str->appendScalar(fRadius2); | 757 str->appendScalar(fRadius2); |
| 756 str->append(" "); | 758 str->append(" "); |
| 757 | 759 |
| 758 this->INHERITED::toString(str); | 760 this->INHERITED::toString(str); |
| 759 | 761 |
| 760 str->append(")"); | 762 str->append(")"); |
| 761 } | 763 } |
| 762 #endif | 764 #endif |
| OLD | NEW |