diff options
author | egdaniel <egdaniel@google.com> | 2015-11-20 14:01:07 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-20 14:01:07 -0800 |
commit | a7006d45217d128a94fa53cb4b827cca79bc7049 (patch) | |
tree | bc66f96e8ef988078ea8ee752006c9debaef32b2 /include/gpu/effects/GrPorterDuffXferProcessor.h | |
parent | 8b78bd6d5b39fe8ef407c4b59b1be8421e58d665 (diff) |
Make specialized SrcOver XPFactory
BUG=skia:
Review URL: https://codereview.chromium.org/1455273006
Diffstat (limited to 'include/gpu/effects/GrPorterDuffXferProcessor.h')
-rw-r--r-- | include/gpu/effects/GrPorterDuffXferProcessor.h | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/include/gpu/effects/GrPorterDuffXferProcessor.h b/include/gpu/effects/GrPorterDuffXferProcessor.h index d297e32908..72faeb572c 100644 --- a/include/gpu/effects/GrPorterDuffXferProcessor.h +++ b/include/gpu/effects/GrPorterDuffXferProcessor.h @@ -14,9 +14,9 @@ class GrProcOptInfo; -class GrPorterDuffXPFactory : public GrXPFactory { +class GrPDXPFactory : public GrXPFactory { public: - static GrXPFactory* Create(SkXfermode::Mode mode); + static const GrXPFactory* Create(SkXfermode::Mode mode); bool supportsRGBCoverage(GrColor /*knownColor*/, uint32_t /*knownColorFlags*/) const override { return true; @@ -26,7 +26,7 @@ public: GrXPFactory::InvariantBlendedColor*) const override; private: - GrPorterDuffXPFactory(SkXfermode::Mode); + GrPDXPFactory(SkXfermode::Mode); GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, @@ -40,7 +40,7 @@ private: bool hasMixedSamples) const override; bool onIsEqual(const GrXPFactory& xpfBase) const override { - const GrPorterDuffXPFactory& xpf = xpfBase.cast<GrPorterDuffXPFactory>(); + const GrPDXPFactory& xpf = xpfBase.cast<GrPDXPFactory>(); return fXfermode == xpf.fXfermode; } @@ -53,4 +53,47 @@ private: typedef GrXPFactory INHERITED; }; +class GrSrcOverPDXPFactory : public GrXPFactory { +public: + GrSrcOverPDXPFactory(); + + bool supportsRGBCoverage(GrColor /*knownColor*/, uint32_t /*knownColorFlags*/) const override { + return true; + } + + void getInvariantBlendedColor(const GrProcOptInfo& colorPOI, + GrXPFactory::InvariantBlendedColor*) const override; + +private: + GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, + const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI, + bool hasMixedSamples, + const DstTexture*) const override; + + bool willReadDstColor(const GrCaps& caps, + const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI, + bool hasMixedSamples) const override; + + bool onIsEqual(const GrXPFactory& /*xpfBase*/) const override { + return true; + } + + GR_DECLARE_XP_FACTORY_TEST; + + typedef GrXPFactory INHERITED; +}; + +namespace GrPorterDuffXPFactory { + const GrSrcOverPDXPFactory gSrcOverPDXPFactory; + + inline const GrXPFactory* Create(SkXfermode::Mode mode) { + if (SkXfermode::kSrcOver_Mode == mode) { + return SkRef(&gSrcOverPDXPFactory); + } + return GrPDXPFactory::Create(mode); + } +}; + #endif |