diff options
author | 2015-12-01 13:54:06 -0800 | |
---|---|---|
committer | 2015-12-01 13:54:06 -0800 | |
commit | f34b293681ea49aaa4aaa70d84515e4a58a112e7 (patch) | |
tree | d7d6a4175405abe7d3fff23fb31974d910bda374 /src/gpu/effects/GrPorterDuffXferProcessor.cpp | |
parent | 7bceedc550513b13e0065aca66e55204a2ba3e1f (diff) |
Add in shader blending for CoverageSetOp XP
BUG=skia:
Review URL: https://codereview.chromium.org/1488213002
Diffstat (limited to 'src/gpu/effects/GrPorterDuffXferProcessor.cpp')
-rw-r--r-- | src/gpu/effects/GrPorterDuffXferProcessor.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp index e288f0c8bd..42a9631976 100644 --- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp +++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp @@ -548,12 +548,27 @@ private: void emitBlendCodeForDstRead(GrGLSLXPBuilder* pb, GrGLSLXPFragmentBuilder* fragBuilder, const char* srcColor, + const char* srcCoverage, const char* dstColor, const char* outColor, + const char* outColorSecondary, const GrXferProcessor& proc) override { const ShaderPDXferProcessor& xp = proc.cast<ShaderPDXferProcessor>(); GrGLSLBlend::AppendMode(fragBuilder, srcColor, dstColor, outColor, xp.getXfermode()); + + // Apply coverage. + if (xp.dstReadUsesMixedSamples()) { + if (srcCoverage) { + fragBuilder->codeAppendf("%s *= %s;", outColor, srcCoverage); + fragBuilder->codeAppendf("%s = %s;", outColorSecondary, srcCoverage); + } else { + fragBuilder->codeAppendf("%s = vec4(1.0);", outColorSecondary); + } + } else if (srcCoverage) { + fragBuilder->codeAppendf("%s = %s * %s + (vec4(1.0) - %s) * %s;", + outColor, srcCoverage, outColor, srcCoverage, dstColor); + } } void onSetData(const GrGLSLProgramDataManager&, const GrXferProcessor&) override {} |