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 |