diff options
author | egdaniel <egdaniel@google.com> | 2015-02-03 15:02:43 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-03 15:02:43 -0800 |
commit | 74a11753604768bf461b80cabb66060e8564d82c (patch) | |
tree | a05ea0f59d44fe6b200505a69408fbd96406ca54 /include/gpu/effects | |
parent | bf015c34e4c36467dfef385893f375b68718450e (diff) |
Move DstCopy on gpu into the GrXferProcessor.
BUG=skia:
Review URL: https://codereview.chromium.org/885923002
Diffstat (limited to 'include/gpu/effects')
-rw-r--r-- | include/gpu/effects/GrPorterDuffXferProcessor.h | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/include/gpu/effects/GrPorterDuffXferProcessor.h b/include/gpu/effects/GrPorterDuffXferProcessor.h index af10fa23ec..e47ec1e904 100644 --- a/include/gpu/effects/GrPorterDuffXferProcessor.h +++ b/include/gpu/effects/GrPorterDuffXferProcessor.h @@ -12,21 +12,22 @@ #include "GrXferProcessor.h" #include "SkXfermode.h" +class GrDrawTargetCaps; class GrProcOptInfo; class GrPorterDuffXferProcessor : public GrXferProcessor { public: static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, - GrColor constant = 0) { - return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend, constant)); + GrColor constant, const GrDeviceCoordTexture* dstCopy, + bool willReadDstColor) { + return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend, constant, dstCopy, + willReadDstColor)); } ~GrPorterDuffXferProcessor() SK_OVERRIDE; const char* name() const SK_OVERRIDE { return "Porter Duff"; } - void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE; - GrGLXferProcessor* createGLInstance() const SK_OVERRIDE; bool hasSecondaryOutput() const SK_OVERRIDE; @@ -75,7 +76,10 @@ public: } private: - GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrColor constant); + GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrColor constant, + const GrDeviceCoordTexture* dstCopy, bool willReadDstColor); + + void onGetGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE; bool onIsEqual(const GrXferProcessor& xpBase) const SK_OVERRIDE { const GrPorterDuffXferProcessor& xp = xpBase.cast<GrPorterDuffXferProcessor>(); @@ -119,9 +123,6 @@ public: return SkNEW_ARGS(GrPorterDuffXPFactory, (src, dst)); } - GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI, - const GrProcOptInfo& coveragePOI) const SK_OVERRIDE; - bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE; bool canApplyCoverage(const GrProcOptInfo& colorPOI, @@ -132,11 +133,15 @@ public: void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, GrXPFactory::InvariantOutput*) const SK_OVERRIDE; - bool willReadDst() const SK_OVERRIDE { return false; } - private: GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst); + GrXferProcessor* onCreateXferProcessor(const GrProcOptInfo& colorPOI, + const GrProcOptInfo& coveragePOI, + const GrDeviceCoordTexture* dstCopy) const SK_OVERRIDE; + + bool willReadDstColor() const SK_OVERRIDE; + bool onIsEqual(const GrXPFactory& xpfBase) const SK_OVERRIDE { const GrPorterDuffXPFactory& xpf = xpfBase.cast<GrPorterDuffXPFactory>(); return (fSrcCoeff == xpf.fSrcCoeff && fDstCoeff == xpf.fDstCoeff); |