| Index: src/effects/gradients/SkTwoPointConicalGradient.cpp
|
| ===================================================================
|
| --- src/effects/gradients/SkTwoPointConicalGradient.cpp (revision 8005)
|
| +++ src/effects/gradients/SkTwoPointConicalGradient.cpp (working copy)
|
| @@ -513,7 +513,6 @@
|
|
|
| // VS
|
| {
|
| - SkString* code = &builder->fVSCode;
|
| SkString p2; // distance between centers
|
| SkString p3; // start radius
|
| SkString p5; // difference in radii (r1 - r0)
|
| @@ -525,15 +524,14 @@
|
| // part of the quadratic as a varying.
|
| if (kVec2f_GrSLType == coordsVaryingType) {
|
| // r2Var = -2 * (r2Parm[2] * varCoord.x - r2Param[3] * r2Param[5])
|
| - code->appendf("\t%s = -2.0 * (%s * %s.x + %s * %s);\n",
|
| - fVSVaryingName, p2.c_str(),
|
| - vsCoordsVarying, p3.c_str(), p5.c_str());
|
| + builder->vsCodeAppendf("\t%s = -2.0 * (%s * %s.x + %s * %s);\n",
|
| + fVSVaryingName, p2.c_str(),
|
| + vsCoordsVarying, p3.c_str(), p5.c_str());
|
| }
|
| }
|
|
|
| // FS
|
| {
|
| - SkString* code = &builder->fFSCode;
|
|
|
| SkString cName("c");
|
| SkString ac4Name("ac4");
|
| @@ -563,92 +561,92 @@
|
| bVar = fFSVaryingName;
|
| } else {
|
| bVar = "b";
|
| - code->appendf("\tfloat %s = -2.0 * (%s * %s.x + %s * %s);\n",
|
| - bVar.c_str(), p2.c_str(), fsCoords,
|
| - p3.c_str(), p5.c_str());
|
| + builder->fsCodeAppendf("\tfloat %s = -2.0 * (%s * %s.x + %s * %s);\n",
|
| + bVar.c_str(), p2.c_str(), fsCoords,
|
| + p3.c_str(), p5.c_str());
|
| }
|
|
|
| // output will default to transparent black (we simply won't write anything
|
| // else to it if invalid, instead of discarding or returning prematurely)
|
| - code->appendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", outputColor);
|
| + builder->fsCodeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", outputColor);
|
|
|
| // c = (x^2)+(y^2) - params[4]
|
| - code->appendf("\tfloat %s = dot(%s, %s) - %s;\n", cName.c_str(),
|
| - fsCoords, fsCoords,
|
| - p4.c_str());
|
| + builder->fsCodeAppendf("\tfloat %s = dot(%s, %s) - %s;\n", cName.c_str(),
|
| + fsCoords, fsCoords,
|
| + p4.c_str());
|
|
|
| // Non-degenerate case (quadratic)
|
| if (!fIsDegenerate) {
|
|
|
| // ac4 = params[0] * c
|
| - code->appendf("\tfloat %s = %s * %s;\n", ac4Name.c_str(), p0.c_str(),
|
| - cName.c_str());
|
| + builder->fsCodeAppendf("\tfloat %s = %s * %s;\n", ac4Name.c_str(), p0.c_str(),
|
| + cName.c_str());
|
|
|
| // d = b^2 - ac4
|
| - code->appendf("\tfloat %s = %s * %s - %s;\n", dName.c_str(),
|
| - bVar.c_str(), bVar.c_str(), ac4Name.c_str());
|
| + builder->fsCodeAppendf("\tfloat %s = %s * %s - %s;\n", dName.c_str(),
|
| + bVar.c_str(), bVar.c_str(), ac4Name.c_str());
|
|
|
| // only proceed if discriminant is >= 0
|
| - code->appendf("\tif (%s >= 0.0) {\n", dName.c_str());
|
| + builder->fsCodeAppendf("\tif (%s >= 0.0) {\n", dName.c_str());
|
|
|
| // intermediate value we'll use to compute the roots
|
| // q = -0.5 * (b +/- sqrt(d))
|
| - code->appendf("\t\tfloat %s = -0.5 * (%s + (%s < 0.0 ? -1.0 : 1.0)"
|
| - " * sqrt(%s));\n", qName.c_str(), bVar.c_str(),
|
| - bVar.c_str(), dName.c_str());
|
| + builder->fsCodeAppendf("\t\tfloat %s = -0.5 * (%s + (%s < 0.0 ? -1.0 : 1.0)"
|
| + " * sqrt(%s));\n", qName.c_str(), bVar.c_str(),
|
| + bVar.c_str(), dName.c_str());
|
|
|
| // compute both roots
|
| // r0 = q * params[1]
|
| - code->appendf("\t\tfloat %s = %s * %s;\n", r0Name.c_str(),
|
| - qName.c_str(), p1.c_str());
|
| + builder->fsCodeAppendf("\t\tfloat %s = %s * %s;\n", r0Name.c_str(),
|
| + qName.c_str(), p1.c_str());
|
| // r1 = c / q
|
| - code->appendf("\t\tfloat %s = %s / %s;\n", r1Name.c_str(),
|
| - cName.c_str(), qName.c_str());
|
| + builder->fsCodeAppendf("\t\tfloat %s = %s / %s;\n", r1Name.c_str(),
|
| + cName.c_str(), qName.c_str());
|
|
|
| // Note: If there are two roots that both generate radius(t) > 0, the
|
| // Canvas spec says to choose the larger t.
|
|
|
| // so we'll look at the larger one first:
|
| - code->appendf("\t\tfloat %s = max(%s, %s);\n", tName.c_str(),
|
| - r0Name.c_str(), r1Name.c_str());
|
| + builder->fsCodeAppendf("\t\tfloat %s = max(%s, %s);\n", tName.c_str(),
|
| + r0Name.c_str(), r1Name.c_str());
|
|
|
| // if r(t) > 0, then we're done; t will be our x coordinate
|
| - code->appendf("\t\tif (%s * %s + %s > 0.0) {\n", tName.c_str(),
|
| - p5.c_str(), p3.c_str());
|
| + builder->fsCodeAppendf("\t\tif (%s * %s + %s > 0.0) {\n", tName.c_str(),
|
| + p5.c_str(), p3.c_str());
|
|
|
| - code->appendf("\t\t");
|
| + builder->fsCodeAppend("\t\t");
|
| this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
|
|
|
| // otherwise, if r(t) for the larger root was <= 0, try the other root
|
| - code->appendf("\t\t} else {\n");
|
| - code->appendf("\t\t\t%s = min(%s, %s);\n", tName.c_str(),
|
| - r0Name.c_str(), r1Name.c_str());
|
| + builder->fsCodeAppend("\t\t} else {\n");
|
| + builder->fsCodeAppendf("\t\t\t%s = min(%s, %s);\n", tName.c_str(),
|
| + r0Name.c_str(), r1Name.c_str());
|
|
|
| // if r(t) > 0 for the smaller root, then t will be our x coordinate
|
| - code->appendf("\t\t\tif (%s * %s + %s > 0.0) {\n",
|
| - tName.c_str(), p5.c_str(), p3.c_str());
|
| + builder->fsCodeAppendf("\t\t\tif (%s * %s + %s > 0.0) {\n",
|
| + tName.c_str(), p5.c_str(), p3.c_str());
|
|
|
| - code->appendf("\t\t\t");
|
| + builder->fsCodeAppend("\t\t\t");
|
| this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
|
|
|
| // end if (r(t) > 0) for smaller root
|
| - code->appendf("\t\t\t}\n");
|
| + builder->fsCodeAppend("\t\t\t}\n");
|
| // end if (r(t) > 0), else, for larger root
|
| - code->appendf("\t\t}\n");
|
| + builder->fsCodeAppend("\t\t}\n");
|
| // end if (discriminant >= 0)
|
| - code->appendf("\t}\n");
|
| + builder->fsCodeAppend("\t}\n");
|
| } else {
|
|
|
| // linear case: t = -c/b
|
| - code->appendf("\tfloat %s = -(%s / %s);\n", tName.c_str(),
|
| - cName.c_str(), bVar.c_str());
|
| + builder->fsCodeAppendf("\tfloat %s = -(%s / %s);\n", tName.c_str(),
|
| + cName.c_str(), bVar.c_str());
|
|
|
| // if r(t) > 0, then t will be the x coordinate
|
| - code->appendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str(),
|
| - p5.c_str(), p3.c_str());
|
| - code->appendf("\t");
|
| + builder->fsCodeAppendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str(),
|
| + p5.c_str(), p3.c_str());
|
| + builder->fsCodeAppend("\t");
|
| this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
|
| - code->appendf("\t}\n");
|
| + builder->fsCodeAppend("\t}\n");
|
| }
|
| }
|
| }
|
|
|