Split distance vector into direction and magnitude components
The vector was split because the vector's users need it split, and we were creating it from the split components in the first place, so it made sense to skip that step. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2223053002 Review-Url: https://codereview.chromium.org/2223053002
This commit is contained in:
parent
397a517d1a
commit
84bca78ab4
@ -86,10 +86,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Here we are splitting the distance vector into length and normalized direction
|
// Here we are splitting the distance vector into length and normalized direction
|
||||||
// TODO: Output these values from the geometry processor frag code instead of the vector
|
fragBuilder->codeAppendf("float dv_length = %s.z;",
|
||||||
fragBuilder->codeAppendf("float dv_length = length(%s);",
|
|
||||||
fragBuilder->distanceVectorName());
|
fragBuilder->distanceVectorName());
|
||||||
fragBuilder->codeAppendf("vec2 dv_norm = normalize(%s);",
|
fragBuilder->codeAppendf("vec2 dv_norm = %s.xy;",
|
||||||
fragBuilder->distanceVectorName());
|
fragBuilder->distanceVectorName());
|
||||||
|
|
||||||
// Asserting presence of necessary uniforms
|
// Asserting presence of necessary uniforms
|
||||||
|
@ -139,10 +139,10 @@ public:
|
|||||||
|
|
||||||
if (args.fDistanceVectorName) {
|
if (args.fDistanceVectorName) {
|
||||||
fragBuilder->codeAppend ("if (d == 0.0) {"); // if on the center of the circle
|
fragBuilder->codeAppend ("if (d == 0.0) {"); // if on the center of the circle
|
||||||
fragBuilder->codeAppendf(" %s = vec2(distanceToEdge, 0.0);", // avoid normalizing
|
fragBuilder->codeAppendf(" %s = vec3(1.0, 0.0, distanceToEdge);", // no normalize
|
||||||
args.fDistanceVectorName);
|
args.fDistanceVectorName);
|
||||||
fragBuilder->codeAppend ("} else {");
|
fragBuilder->codeAppend ("} else {");
|
||||||
fragBuilder->codeAppendf(" %s = normalize(%s.xy) * distanceToEdge;",
|
fragBuilder->codeAppendf(" %s = vec3(normalize(%s.xy), distanceToEdge);",
|
||||||
args.fDistanceVectorName, v.fsIn());
|
args.fDistanceVectorName, v.fsIn());
|
||||||
fragBuilder->codeAppend ("}");
|
fragBuilder->codeAppend ("}");
|
||||||
}
|
}
|
||||||
|
@ -90,8 +90,9 @@ void GrGLSLProgramBuilder::emitAndInstallPrimProc(const GrPrimitiveProcessor& pr
|
|||||||
const char* distanceVectorName = nullptr;
|
const char* distanceVectorName = nullptr;
|
||||||
if (this->fPipeline.usesDistanceVectorField() && proc.implementsDistanceVector()) {
|
if (this->fPipeline.usesDistanceVectorField() && proc.implementsDistanceVector()) {
|
||||||
distanceVectorName = fFS.distanceVectorName();
|
distanceVectorName = fFS.distanceVectorName();
|
||||||
fFS.codeAppend( "// Un-normalized vector to the closed geometric edge (in source space)\n");
|
fFS.codeAppend( "// Normalized vector to the closest geometric edge (in source space)\n");
|
||||||
fFS.codeAppendf("vec2 %s;", distanceVectorName);
|
fFS.codeAppend( "// Distance to the edge encoded in the z-component\n");
|
||||||
|
fFS.codeAppendf("vec3 %s;", distanceVectorName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enclose custom code in a block to avoid namespace conflicts
|
// Enclose custom code in a block to avoid namespace conflicts
|
||||||
|
Loading…
Reference in New Issue
Block a user