Chromium Code Reviews| Index: include/gpu/effects/GrPorterDuffXferProcessor.h |
| diff --git a/include/gpu/effects/GrPorterDuffXferProcessor.h b/include/gpu/effects/GrPorterDuffXferProcessor.h |
| index d297e3290854c01e1d963df5c5f9f1b68fc4ac19..ea53dce78b0f00b4b25d83fc5a8d39e806f7f64d 100644 |
| --- a/include/gpu/effects/GrPorterDuffXferProcessor.h |
| +++ b/include/gpu/effects/GrPorterDuffXferProcessor.h |
| @@ -16,18 +16,24 @@ class GrProcOptInfo; |
| class GrPorterDuffXPFactory : public GrXPFactory { |
| public: |
| - static GrXPFactory* Create(SkXfermode::Mode mode); |
| - |
| - bool supportsRGBCoverage(GrColor /*knownColor*/, uint32_t /*knownColorFlags*/) const override { |
| - return true; |
| - } |
| - |
| void getInvariantBlendedColor(const GrProcOptInfo& colorPOI, |
| GrXPFactory::InvariantBlendedColor*) const override; |
| private: |
| GrPorterDuffXPFactory(SkXfermode::Mode); |
| + static GrXPFactory* InternalCreate(SkXfermode::Mode mode); |
| + |
| +public: |
| + static inline GrXPFactory* Create(SkXfermode::Mode mode) { |
| + if (SkXfermode::kSrc_Mode == mode) { |
|
egdaniel
2015/11/23 20:10:15
Since Src is our second most common blend mode, an
bsalomon
2015/11/23 20:19:51
second most common in real content? My instinct is
egdaniel
2015/11/23 20:49:04
removed
|
| + static GrPorterDuffXPFactory gSrcPDXPF(SkXfermode::kSrc_Mode); |
| + return SkRef(&gSrcPDXPF); |
| + } |
| + return InternalCreate(mode); |
| + } |
| + |
| +private: |
| GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, |
| const GrProcOptInfo& colorPOI, |
| const GrProcOptInfo& coveragePOI, |
| @@ -53,4 +59,30 @@ private: |
| typedef GrXPFactory INHERITED; |
| }; |
| +GrXferProcessor* GrCreateSrcOverXferProcessor(const GrCaps& caps, |
|
bsalomon
2015/11/23 20:19:51
Should this be GrPorterDuffXPFactory::CreateSrcOve
egdaniel
2015/11/23 20:49:04
Done.
|
| + const GrProcOptInfo& colorPOI, |
| + const GrProcOptInfo& coveragePOI, |
| + bool hasMixedSamples, |
| + const GrXferProcessor::DstTexture*); |
| + |
| +inline void GrSrcOverInvariantBlendedColor(GrColor inputColor, |
| + GrColorComponentFlags validColorFlags, |
| + bool isOpaque, |
| + GrXPFactory::InvariantBlendedColor* blendedColor) { |
| + if (!isOpaque) { |
| + blendedColor->fWillBlendWithDst = true; |
| + blendedColor->fKnownColorFlags = kNone_GrColorComponentFlags; |
| + return; |
| + } |
| + blendedColor->fWillBlendWithDst = false; |
| + |
| + blendedColor->fKnownColor = inputColor; |
| + blendedColor->fKnownColorFlags = validColorFlags; |
| +} |
| + |
| +bool GrSrcOverWillNeedDstTexture(const GrCaps& caps, |
| + const GrProcOptInfo& colorPOI, |
| + const GrProcOptInfo& coveragePOI, |
| + bool hasMixedSamples); |
| + |
| #endif |