Index: src/effects/SkDisplacementMapEffect.cpp |
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp |
index 45137d51597b71a3d16ff8d2c315959a2d5e5b49..11332b10da35edd93f5d703f158712c8f79ee6f0 100644 |
--- a/src/effects/SkDisplacementMapEffect.cpp |
+++ b/src/effects/SkDisplacementMapEffect.cpp |
@@ -306,12 +306,7 @@ public: |
GrGLDisplacementMapEffect(const GrProcessor&); |
virtual ~GrGLDisplacementMapEffect(); |
- virtual void emitCode(GrGLFPBuilder*, |
- const GrFragmentProcessor&, |
- const char* outputColor, |
- const char* inputColor, |
- const TransformedCoordsArray&, |
- const TextureSamplerArray&) override; |
+ virtual void emitCode(EmitArgs&) override; |
static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder*); |
@@ -560,33 +555,28 @@ GrGLDisplacementMapEffect::GrGLDisplacementMapEffect(const GrProcessor& proc) |
GrGLDisplacementMapEffect::~GrGLDisplacementMapEffect() { |
} |
-void GrGLDisplacementMapEffect::emitCode(GrGLFPBuilder* builder, |
- const GrFragmentProcessor& fp, |
- const char* outputColor, |
- const char* inputColor, |
- const TransformedCoordsArray& coords, |
- const TextureSamplerArray& samplers) { |
- const GrTextureDomain& domain = fp.cast<GrDisplacementMapEffect>().domain(); |
- sk_ignore_unused_variable(inputColor); |
+void GrGLDisplacementMapEffect::emitCode(EmitArgs& args) { |
+ const GrTextureDomain& domain = args.fFp.cast<GrDisplacementMapEffect>().domain(); |
- fScaleUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ fScaleUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kVec2f_GrSLType, kDefault_GrSLPrecision, "Scale"); |
- const char* scaleUni = builder->getUniformCStr(fScaleUni); |
+ const char* scaleUni = args.fBuilder->getUniformCStr(fScaleUni); |
const char* dColor = "dColor"; |
const char* cCoords = "cCoords"; |
const char* nearZero = "1e-6"; // Since 6.10352e−5 is the smallest half float, use |
// a number smaller than that to approximate 0, but |
// leave room for 32-bit float GPU rounding errors. |
- GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
+ GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); |
fsBuilder->codeAppendf("\t\tvec4 %s = ", dColor); |
- fsBuilder->appendTextureLookup(samplers[0], coords[0].c_str(), coords[0].getType()); |
+ fsBuilder->appendTextureLookup(args.fSamplers[0], args.fCoords[0].c_str(), |
+ args.fCoords[0].getType()); |
fsBuilder->codeAppend(";\n"); |
// Unpremultiply the displacement |
fsBuilder->codeAppendf("\t\t%s.rgb = (%s.a < %s) ? vec3(0.0) : clamp(%s.rgb / %s.a, 0.0, 1.0);", |
dColor, dColor, nearZero, dColor, dColor); |
- SkString coords2D = fsBuilder->ensureFSCoords2D(coords, 1); |
+ SkString coords2D = fsBuilder->ensureFSCoords2D(args.fCoords, 1); |
fsBuilder->codeAppendf("\t\tvec2 %s = %s + %s*(%s.", |
cCoords, coords2D.c_str(), scaleUni, dColor); |
@@ -627,7 +617,8 @@ void GrGLDisplacementMapEffect::emitCode(GrGLFPBuilder* builder, |
} |
fsBuilder->codeAppend("-vec2(0.5));\t\t"); |
- fGLDomain.sampleTexture(fsBuilder, domain, outputColor, SkString(cCoords), samplers[1]); |
+ fGLDomain.sampleTexture(fsBuilder, domain, args.fOutputColor, SkString(cCoords), |
+ args.fSamplers[1]); |
fsBuilder->codeAppend(";\n"); |
} |