Index: src/gpu/glsl/GrGLSLProgramBuilder.cpp |
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp |
index 64bc0640b9d92547aa18f1d883424a14ceb1944a..1f28f19bb99088054125c838ec037c267c39bc03 100644 |
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp |
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp |
@@ -87,6 +87,13 @@ void GrGLSLProgramBuilder::emitAndInstallPrimProc(const GrPrimitiveProcessor& pr |
this->nameExpression(outputColor, "outputColor"); |
this->nameExpression(outputCoverage, "outputCoverage"); |
+ const char* distanceVectorName = nullptr; |
+ if (this->fPipeline.usesDistanceVectorField() && proc.implementsDistanceVector()) { |
+ distanceVectorName = fFS.distanceVectorName(); |
+ fFS.codeAppend( "// Un-normalized vector to the closed geometric edge (in source space)\n"); |
+ fFS.codeAppendf("vec2 %s;", distanceVectorName); |
+ } |
+ |
// Enclose custom code in a block to avoid namespace conflicts |
SkString openBrace; |
openBrace.printf("{ // Stage %d, %s\n", fStageIndex, proc.name()); |
@@ -108,6 +115,7 @@ void GrGLSLProgramBuilder::emitAndInstallPrimProc(const GrPrimitiveProcessor& pr |
proc, |
outputColor->c_str(), |
outputCoverage->c_str(), |
+ distanceVectorName, |
texSamplers.begin(), |
bufferSamplers.begin(), |
fCoordTransforms, |
@@ -161,7 +169,9 @@ void GrGLSLProgramBuilder::emitAndInstallFragProc(const GrFragmentProcessor& fp, |
input.isOnes() ? nullptr : input.c_str(), |
fOutCoords[index], |
texSamplers.begin(), |
- bufferSamplers.begin()); |
+ bufferSamplers.begin(), |
+ this->primitiveProcessor().implementsDistanceVector()); |
+ |
fragProc->emitCode(args); |
// We have to check that effects and the code they emit are consistent, ie if an effect |