| Index: src/effects/SkLightingImageFilter.cpp
|
| diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
|
| index 3cac4fc05413917c4404414a41a157ea5a6ac20a..a30955faf7f7a1561549eabe415b6b1d34bc14be 100644
|
| --- a/src/effects/SkLightingImageFilter.cpp
|
| +++ b/src/effects/SkLightingImageFilter.cpp
|
| @@ -1514,12 +1514,7 @@ public:
|
| GrGLLightingEffect(const GrProcessor&);
|
| virtual ~GrGLLightingEffect();
|
|
|
| - void emitCode(GrGLFPBuilder*,
|
| - const GrFragmentProcessor&,
|
| - const char* outputColor,
|
| - const char* inputColor,
|
| - const TransformedCoordsArray&,
|
| - const TextureSamplerArray&) override;
|
| + void emitCode(EmitArgs&) override;
|
|
|
| static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder* b);
|
|
|
| @@ -1656,21 +1651,16 @@ GrGLLightingEffect::~GrGLLightingEffect() {
|
| delete fLight;
|
| }
|
|
|
| -void GrGLLightingEffect::emitCode(GrGLFPBuilder* builder,
|
| - const GrFragmentProcessor&,
|
| - const char* outputColor,
|
| - const char* inputColor,
|
| - const TransformedCoordsArray& coords,
|
| - const TextureSamplerArray& samplers) {
|
| - fImageIncrementUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| +void GrGLLightingEffect::emitCode(EmitArgs& args) {
|
| + fImageIncrementUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| kVec2f_GrSLType, kDefault_GrSLPrecision,
|
| "ImageIncrement");
|
| - fSurfaceScaleUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| + fSurfaceScaleUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| kFloat_GrSLType, kDefault_GrSLPrecision,
|
| "SurfaceScale");
|
| - fLight->emitLightColorUniform(builder);
|
| + fLight->emitLightColorUniform(args.fBuilder);
|
| SkString lightFunc;
|
| - this->emitLightFunc(builder, &lightFunc);
|
| + this->emitLightFunc(args.fBuilder, &lightFunc);
|
| static const GrGLShaderVar gSobelArgs[] = {
|
| GrGLShaderVar("a", kFloat_GrSLType),
|
| GrGLShaderVar("b", kFloat_GrSLType),
|
| @@ -1681,8 +1671,8 @@ void GrGLLightingEffect::emitCode(GrGLFPBuilder* builder,
|
| GrGLShaderVar("scale", kFloat_GrSLType),
|
| };
|
| SkString sobelFuncName;
|
| - GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
|
| - SkString coords2D = fsBuilder->ensureFSCoords2D(coords, 0);
|
| + GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder();
|
| + SkString coords2D = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
|
|
|
| fsBuilder->emitFunction(kFloat_GrSLType,
|
| "sobel",
|
| @@ -1721,8 +1711,8 @@ void GrGLLightingEffect::emitCode(GrGLFPBuilder* builder,
|
| fsBuilder->codeAppendf("\t\tvec2 coord = %s;\n", coords2D.c_str());
|
| fsBuilder->codeAppend("\t\tfloat m[9];\n");
|
|
|
| - const char* imgInc = builder->getUniformCStr(fImageIncrementUni);
|
| - const char* surfScale = builder->getUniformCStr(fSurfaceScaleUni);
|
| + const char* imgInc = args.fBuilder->getUniformCStr(fImageIncrementUni);
|
| + const char* surfScale = args.fBuilder->getUniformCStr(fSurfaceScaleUni);
|
|
|
| int index = 0;
|
| for (int dy = 1; dy >= -1; dy--) {
|
| @@ -1730,21 +1720,21 @@ void GrGLLightingEffect::emitCode(GrGLFPBuilder* builder,
|
| SkString texCoords;
|
| texCoords.appendf("coord + vec2(%d, %d) * %s", dx, dy, imgInc);
|
| fsBuilder->codeAppendf("\t\tm[%d] = ", index++);
|
| - fsBuilder->appendTextureLookup(samplers[0], texCoords.c_str());
|
| + fsBuilder->appendTextureLookup(args.fSamplers[0], texCoords.c_str());
|
| fsBuilder->codeAppend(".a;\n");
|
| }
|
| }
|
| fsBuilder->codeAppend("\t\tvec3 surfaceToLight = ");
|
| SkString arg;
|
| arg.appendf("%s * m[4]", surfScale);
|
| - fLight->emitSurfaceToLight(builder, arg.c_str());
|
| + fLight->emitSurfaceToLight(args.fBuilder, arg.c_str());
|
| fsBuilder->codeAppend(";\n");
|
| fsBuilder->codeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ",
|
| - outputColor, lightFunc.c_str(), normalName.c_str(), surfScale);
|
| - fLight->emitLightColor(builder, "surfaceToLight");
|
| + args.fOutputColor, lightFunc.c_str(), normalName.c_str(), surfScale);
|
| + fLight->emitLightColor(args.fBuilder, "surfaceToLight");
|
| fsBuilder->codeAppend(");\n");
|
| SkString modulate;
|
| - GrGLSLMulVarBy4f(&modulate, outputColor, inputColor);
|
| + GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor);
|
| fsBuilder->codeAppend(modulate.c_str());
|
| }
|
|
|
|
|