diff options
author | 2015-06-08 12:14:44 -0700 | |
---|---|---|
committer | 2015-06-08 12:14:44 -0700 | |
commit | edbb31f7ddea834b8e55ea66587ea8d33adc53fa (patch) | |
tree | 15ddac4ce23919b8b8f5c60b8dfe2e623ca35dac /src/effects/SkArithmeticMode_gpu.cpp | |
parent | c31af44336f5eb4a50e83e76e51962d46c3ed458 (diff) |
Apply coverage in XP base class when using dst reads
Moves the coverage logic into GrGLXferProcessor for XPs that perform
dst reads. XPs that don't use a dst read are still responsible to
handle coverage on their own.
BUG=skia:
Review URL: https://codereview.chromium.org/1170553002
Diffstat (limited to 'src/effects/SkArithmeticMode_gpu.cpp')
-rw-r--r-- | src/effects/SkArithmeticMode_gpu.cpp | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/effects/SkArithmeticMode_gpu.cpp b/src/effects/SkArithmeticMode_gpu.cpp index d0dd98b365..0d81c7966c 100644 --- a/src/effects/SkArithmeticMode_gpu.cpp +++ b/src/effects/SkArithmeticMode_gpu.cpp @@ -172,8 +172,6 @@ public: GrGLXferProcessor* createGLInstance() const override; - bool hasSecondaryOutput() const override { return false; } - float k1() const { return fK1; } float k2() const { return fK2; } float k3() const { return fK3; } @@ -228,22 +226,16 @@ public: } private: - void onEmitCode(const EmitArgs& args) override { - GrGLXPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); - - const char* dstColor = fsBuilder->dstColor(); - - fKUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, - kVec4f_GrSLType, kDefault_GrSLPrecision, - "k"); - const char* kUni = args.fPB->getUniformCStr(fKUni); + void emitBlendCodeForDstRead(GrGLXPBuilder* pb, const char* srcColor, const char* dstColor, + const char* outColor, const GrXferProcessor& proc) override { + GrGLXPFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder(); - add_arithmetic_code(fsBuilder, args.fInputColor, dstColor, args.fOutputPrimary, kUni, - fEnforcePMColor); + fKUni = pb->addUniform(GrGLProgramBuilder::kFragment_Visibility, + kVec4f_GrSLType, kDefault_GrSLPrecision, + "k"); + const char* kUni = pb->getUniformCStr(fKUni); - fsBuilder->codeAppendf("%s = %s * %s + (vec4(1.0) - %s) * %s;", - args.fOutputPrimary, args.fOutputPrimary, args.fInputCoverage, - args.fInputCoverage, dstColor); + add_arithmetic_code(fsBuilder, srcColor, dstColor, outColor, kUni, fEnforcePMColor); } void onSetData(const GrGLProgramDataManager& pdman, |