diff options
Diffstat (limited to 'src/effects/SkColorMatrixFilter.cpp')
-rw-r--r-- | src/effects/SkColorMatrixFilter.cpp | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp index 205bcdb491..d0bd1625ac 100644 --- a/src/effects/SkColorMatrixFilter.cpp +++ b/src/effects/SkColorMatrixFilter.cpp @@ -413,34 +413,31 @@ public: GLProcessor(const GrProcessor&) {} - virtual void emitCode(GrGLFPBuilder* builder, - const GrFragmentProcessor&, - const char* outputColor, - const char* inputColor, - const TransformedCoordsArray&, - const TextureSamplerArray&) override { - fMatrixHandle = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, + virtual void emitCode(EmitArgs& args) override { + fMatrixHandle = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, kMat44f_GrSLType, kDefault_GrSLPrecision, "ColorMatrix"); - fVectorHandle = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, + fVectorHandle = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, kVec4f_GrSLType, kDefault_GrSLPrecision, "ColorMatrixVector"); - if (NULL == inputColor) { + if (NULL == args.fInputColor) { // could optimize this case, but we aren't for now. - inputColor = "vec4(1)"; + args.fInputColor = "vec4(1)"; } - GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); + GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); // The max() is to guard against 0 / 0 during unpremul when the incoming color is // transparent black. - fsBuilder->codeAppendf("\tfloat nonZeroAlpha = max(%s.a, 0.00001);\n", inputColor); + fsBuilder->codeAppendf("\tfloat nonZeroAlpha = max(%s.a, 0.00001);\n", + args.fInputColor); fsBuilder->codeAppendf("\t%s = %s * vec4(%s.rgb / nonZeroAlpha, nonZeroAlpha) + %s;\n", - outputColor, - builder->getUniformCStr(fMatrixHandle), - inputColor, - builder->getUniformCStr(fVectorHandle)); - fsBuilder->codeAppendf("\t%s = clamp(%s, 0.0, 1.0);\n", outputColor, outputColor); - fsBuilder->codeAppendf("\t%s.rgb *= %s.a;\n", outputColor, outputColor); + args.fOutputColor, + args.fBuilder->getUniformCStr(fMatrixHandle), + args.fInputColor, + args.fBuilder->getUniformCStr(fVectorHandle)); + fsBuilder->codeAppendf("\t%s = clamp(%s, 0.0, 1.0);\n", + args.fOutputColor, args.fOutputColor); + fsBuilder->codeAppendf("\t%s.rgb *= %s.a;\n", args.fOutputColor, args.fOutputColor); } virtual void setData(const GrGLProgramDataManager& uniManager, |