Index: src/gpu/effects/GrPorterDuffXferProcessor.h |
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.h b/src/gpu/effects/GrPorterDuffXferProcessor.h |
index d210a81755a3296580772e1733ce5f26956fb9ee..5cc8090e6a92b4d2f5ce47a8755f99437ff93e5e 100644 |
--- a/src/gpu/effects/GrPorterDuffXferProcessor.h |
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.h |
@@ -19,8 +19,9 @@ class GrInvariantOutput; |
class GrPorterDuffXferProcessor : public GrXferProcessor { |
public: |
- static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend) { |
- return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend)); |
+ static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, |
+ GrColor constant = 0) { |
+ return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend, constant)); |
} |
virtual ~GrPorterDuffXferProcessor(); |
@@ -30,12 +31,28 @@ public: |
typedef GrGLPorterDuffXferProcessor GLProcessor; |
static const char* Name() { return "Porter Duff"; } |
+ virtual GrXferProcessor::BlendOptFlags getBlendOpts(const GrProcOptInfo& colorPOI, |
+ const GrProcOptInfo& coveragePOI, |
+ bool isCoverageDrawing, |
+ bool colorWriteDisabled, |
+ bool doesStencilWrite, |
+ GrColor* color, |
+ uint8_t* coverage) SK_OVERRIDE; |
+ |
+ virtual void getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const SK_OVERRIDE { |
+ blendInfo->fSrcBlend = fSrcBlend; |
+ blendInfo->fDstBlend = fDstBlend; |
+ blendInfo->fBlendConstant = fBlendConstant; |
+ } |
+ |
private: |
- GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend); |
+ GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrColor constant); |
virtual bool onIsEqual(const GrFragmentProcessor& fpBase) const SK_OVERRIDE { |
const GrPorterDuffXferProcessor& xp = fpBase.cast<GrPorterDuffXferProcessor>(); |
- if (fSrcBlend != xp.fSrcBlend || fDstBlend != xp.fDstBlend) { |
+ if (fSrcBlend != xp.fSrcBlend || |
+ fDstBlend != xp.fDstBlend || |
+ fBlendConstant != xp.fBlendConstant) { |
return false; |
} |
return true; |
@@ -45,7 +62,8 @@ private: |
GrBlendCoeff fSrcBlend; |
GrBlendCoeff fDstBlend; |
- |
+ GrColor fBlendConstant; |
+ |
typedef GrXferProcessor INHERITED; |
}; |
@@ -63,16 +81,30 @@ public: |
return SkNEW_ARGS(GrPorterDuffXPFactory, (src, dst)); |
} |
- const GrXferProcessor* createXferProcessor() const SK_OVERRIDE; |
+ 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, const GrProcOptInfo& coveragePOI, |
+ bool isCoverageDrawing, bool colorWriteDisabled) const SK_OVERRIDE; |
+ |
+ bool willBlendWithDst(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, |
+ bool isCoverageDrawing, bool colorWriteDisabled) const SK_OVERRIDE; |
+ |
+ bool canTweakAlphaForCoverage(bool isCoverageDrawing) const SK_OVERRIDE; |
+ |
+ bool getOpaqueAndKnownColor(const GrProcOptInfo& colorPOI, |
+ const GrProcOptInfo& coveragePOI, |
+ GrColor* solidColor, |
+ uint32_t* solidColorKnownComponents) const SK_OVERRIDE; |
+ |
private: |
GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst) |
- : fSrc(src), fDst(dst) {} |
+ : fSrcCoeff(src), fDstCoeff(dst) {} |
- GrBlendCoeff fSrc; |
- GrBlendCoeff fDst; |
+ GrBlendCoeff fSrcCoeff; |
+ GrBlendCoeff fDstCoeff; |
typedef GrXPFactory INHERITED; |
}; |