aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkArithmeticMode_gpu.cpp
diff options
context:
space:
mode:
authorGravatar cdalton <cdalton@nvidia.com>2015-06-08 12:14:44 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-06-08 12:14:44 -0700
commitedbb31f7ddea834b8e55ea66587ea8d33adc53fa (patch)
tree15ddac4ce23919b8b8f5c60b8dfe2e623ca35dac /src/effects/SkArithmeticMode_gpu.cpp
parentc31af44336f5eb4a50e83e76e51962d46c3ed458 (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.cpp24
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,