| Index: src/gpu/effects/GrTextureDomain.cpp
|
| diff --git a/src/gpu/effects/GrTextureDomain.cpp b/src/gpu/effects/GrTextureDomain.cpp
|
| index 73eb8ff8ef9d1cefe6657883363470b316f76512..00067c491ce6c21e555fff4ec1f107d95475a1c9 100644
|
| --- a/src/gpu/effects/GrTextureDomain.cpp
|
| +++ b/src/gpu/effects/GrTextureDomain.cpp
|
| @@ -64,21 +64,21 @@ void GrTextureDomain::GLDomain::sampleTexture(GrGLShaderBuilder* builder,
|
|
|
| switch (textureDomain.mode()) {
|
| case kIgnore_Mode: {
|
| - builder->codeAppendf("\t%s = ", outColor);
|
| + builder->codeAppendf("%s = ", outColor);
|
| builder->appendTextureLookupAndModulate(inModulateColor, sampler,
|
| inCoords.c_str());
|
| - builder->codeAppend(";\n");
|
| + builder->codeAppend(";");
|
| break;
|
| }
|
| case kClamp_Mode: {
|
| SkString clampedCoords;
|
| - clampedCoords.appendf("\tclamp(%s, %s.xy, %s.zw)",
|
| + clampedCoords.appendf("clamp(%s, %s.xy, %s.zw)",
|
| inCoords.c_str(), fDomainName.c_str(), fDomainName.c_str());
|
|
|
| - builder->codeAppendf("\t%s = ", outColor);
|
| + builder->codeAppendf("%s = ", outColor);
|
| builder->appendTextureLookupAndModulate(inModulateColor, sampler,
|
| clampedCoords.c_str());
|
| - builder->codeAppend(";\n");
|
| + builder->codeAppend(";");
|
| break;
|
| }
|
| case kDecal_Mode: {
|
| @@ -93,44 +93,49 @@ void GrTextureDomain::GLDomain::sampleTexture(GrGLShaderBuilder* builder,
|
| // may return undefined results". This appears to be an issue with
|
| // the 'any' call since even the simple "result=black; if (any())
|
| // result=white;" code fails to compile.
|
| - builder->codeAppend("\tvec4 outside = vec4(0.0, 0.0, 0.0, 0.0);\n");
|
| - builder->codeAppend("\tvec4 inside = ");
|
| + builder->codeAppend("vec4 outside = vec4(0.0, 0.0, 0.0, 0.0);");
|
| + builder->codeAppend("vec4 inside = ");
|
| builder->appendTextureLookupAndModulate(inModulateColor, sampler,
|
| inCoords.c_str());
|
| - builder->codeAppend(";\n");
|
| - builder->codeAppendf("\tfloat x = (%s).x;\n", inCoords.c_str());
|
| - builder->codeAppendf("\tfloat y = (%s).y;\n", inCoords.c_str());
|
| -
|
| - builder->codeAppendf("\tx = abs(2.0*(x - %s.x)/(%s.z - %s.x) - 1.0);\n",
|
| - domain, domain, domain);
|
| - builder->codeAppendf("\ty = abs(2.0*(y - %s.y)/(%s.w - %s.y) - 1.0);\n",
|
| - domain, domain, domain);
|
| - builder->codeAppend("\tfloat blend = step(1.0, max(x, y));\n");
|
| - builder->codeAppendf("\t%s = mix(inside, outside, blend);\n", outColor);
|
| + builder->codeAppend(";");
|
| +
|
| + builder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision,
|
| + program->ctxInfo().standard()));
|
| + builder->codeAppendf("float x = (%s).x;", inCoords.c_str());
|
| + builder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision,
|
| + program->ctxInfo().standard()));
|
| + builder->codeAppendf("float y = (%s).y;", inCoords.c_str());
|
| +
|
| + builder->codeAppendf("x = abs(2.0*(x - %s.x)/(%s.z - %s.x) - 1.0);",
|
| + domain, domain, domain);
|
| + builder->codeAppendf("y = abs(2.0*(y - %s.y)/(%s.w - %s.y) - 1.0);",
|
| + domain, domain, domain);
|
| + builder->codeAppend("float blend = step(1.0, max(x, y));");
|
| + builder->codeAppendf("%s = mix(inside, outside, blend);", outColor);
|
| } else {
|
| - builder->codeAppend("\tbvec4 outside;\n");
|
| - builder->codeAppendf("\toutside.xy = lessThan(%s, %s.xy);\n", inCoords.c_str(),
|
| + builder->codeAppend("bvec4 outside;\n");
|
| + builder->codeAppendf("outside.xy = lessThan(%s, %s.xy);", inCoords.c_str(),
|
| domain);
|
| - builder->codeAppendf("\toutside.zw = greaterThan(%s, %s.zw);\n", inCoords.c_str(),
|
| + builder->codeAppendf("outside.zw = greaterThan(%s, %s.zw);", inCoords.c_str(),
|
| domain);
|
| - builder->codeAppendf("\t%s = any(outside) ? vec4(0.0, 0.0, 0.0, 0.0) : ",
|
| + builder->codeAppendf("%s = any(outside) ? vec4(0.0, 0.0, 0.0, 0.0) : ",
|
| outColor);
|
| builder->appendTextureLookupAndModulate(inModulateColor, sampler,
|
| inCoords.c_str());
|
| - builder->codeAppend(";\n");
|
| + builder->codeAppend(";");
|
| }
|
| break;
|
| }
|
| case kRepeat_Mode: {
|
| SkString clampedCoords;
|
| - clampedCoords.printf("\tmod(%s - %s.xy, %s.zw - %s.xy) + %s.xy",
|
| + clampedCoords.printf("mod(%s - %s.xy, %s.zw - %s.xy) + %s.xy",
|
| inCoords.c_str(), fDomainName.c_str(), fDomainName.c_str(),
|
| fDomainName.c_str(), fDomainName.c_str());
|
|
|
| - builder->codeAppendf("\t%s = ", outColor);
|
| + builder->codeAppendf("%s = ", outColor);
|
| builder->appendTextureLookupAndModulate(inModulateColor, sampler,
|
| clampedCoords.c_str());
|
| - builder->codeAppend(";\n");
|
| + builder->codeAppend(";");
|
| break;
|
| }
|
| }
|
|
|