diff options
author | 2014-12-03 10:40:13 -0800 | |
---|---|---|
committer | 2014-12-03 10:40:13 -0800 | |
commit | 378092f3d10b1dd62967f419c35cfefec7c10ee7 (patch) | |
tree | 2053505fc4cccddb5a366ef26897128b2a65b0cd /src/core/SkXfermode.cpp | |
parent | 5ab7e80f2b477c55be9861ab1c56e33e19aa97a6 (diff) |
Add XferProcessor factory in GrPaint and GrDrawState.
In this CL the XP should have zero effect on the actual rendering pipeline.
BUG=skia:
Review URL: https://codereview.chromium.org/751283002
Diffstat (limited to 'src/core/SkXfermode.cpp')
-rw-r--r-- | src/core/SkXfermode.cpp | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index e0abb4ebdd..ef44b1e747 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -6,7 +6,6 @@ * found in the LICENSE file. */ - #include "SkXfermode.h" #include "SkXfermode_opts_SSE2.h" #include "SkXfermode_proccoeff.h" @@ -680,16 +679,41 @@ bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const { return false; } -bool SkXfermode::asFragmentProcessorOrCoeff(SkXfermode* xfermode, GrFragmentProcessor** fp, - Coeff* src, Coeff* dst, GrTexture* background) { +bool SkXfermode::asXPFactory(GrXPFactory**) const { + return false; +} + + +#if SK_SUPPORT_GPU +#include "effects/GrPorterDuffXferProcessor.h" + +bool SkXfermode::AsFragmentProcessorOrXPFactory(SkXfermode* xfermode, + GrFragmentProcessor** fp, + GrXPFactory** xpf, + Coeff* src, Coeff* dst) { if (NULL == xfermode) { - return ModeAsCoeff(kSrcOver_Mode, src, dst); + SkAssertResult(ModeAsCoeff(kSrcOver_Mode, src, dst)); + *xpf = GrPorterDuffXPFactory::Create(*src, *dst); + return true; } else if (xfermode->asCoeff(src, dst)) { + *xpf = GrPorterDuffXPFactory::Create(*src, *dst); + return true; + } else if (xfermode->asXPFactory(xpf)) { + *src = SkXfermode::kOne_Coeff; + *dst = SkXfermode::kZero_Coeff; return true; } else { - return xfermode->asFragmentProcessor(fp, background); + return xfermode->asFragmentProcessor(fp); } } +#else +bool SkXfermode::AsFragmentProcessorOrXPFactory(SkXfermode* xfermode, + GrFragmentProcessor** fp, + GrXPFactory** xpf, + Coeff* src, Coeff* dst) { + return false; +} +#endif SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{ // no-op. subclasses should override this |