Index: src/gpu/GrDrawState.h |
diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h |
index 39163ff5eed75f787b70f498d3dc0b76f8c6ecb9..68c71f020a3aff710d9b7c5c77cce70500ee420b 100644 |
--- a/src/gpu/GrDrawState.h |
+++ b/src/gpu/GrDrawState.h |
@@ -17,7 +17,9 @@ |
#include "GrProcOptInfo.h" |
#include "GrRenderTarget.h" |
#include "GrStencil.h" |
+#include "GrXferProcessor.h" |
#include "SkMatrix.h" |
+#include "effects/GrPorterDuffXferProcessor.h" |
#include "effects/GrSimpleTextureEffect.h" |
class GrDrawTargetCaps; |
@@ -214,6 +216,22 @@ public: |
*/ |
bool willEffectReadDstColor() const; |
+ /** |
+ * The xfer processor factory. |
+ */ |
+ const GrXPFactory* setXPFactory(const GrXPFactory* xpFactory) { |
+ fXPFactory.reset(SkRef(xpFactory)); |
+ return xpFactory; |
+ } |
+ |
+ void setPorterDuffXPFactory(SkXfermode::Mode mode) { |
+ fXPFactory.reset(GrPorterDuffXPFactory::Create(mode)); |
+ } |
+ |
+ void setPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst) { |
+ fXPFactory.reset(GrPorterDuffXPFactory::Create(src, dst)); |
+ } |
+ |
const GrFragmentProcessor* addColorProcessor(const GrFragmentProcessor* effect) { |
SkASSERT(effect); |
SkNEW_APPEND_TO_TARRAY(&fColorStages, GrFragmentStage, (effect)); |
@@ -332,15 +350,6 @@ public: |
/// @name Blending |
//// |
- GrBlendCoeff getSrcBlendCoeff() const { return fSrcBlend; } |
- GrBlendCoeff getDstBlendCoeff() const { return fDstBlend; } |
- |
- /** |
- * Retrieves the last value set by setBlendConstant() |
- * @return the blending constant value |
- */ |
- GrColor getBlendConstant() const { return fBlendConstant; } |
- |
/** |
* Determines whether multiplying the computed per-pixel color by the pixel's fractional |
* coverage before the blend will give the correct final destination color. In general it |
@@ -348,44 +357,6 @@ public: |
*/ |
bool canTweakAlphaForCoverage() const; |
- /** |
- * Sets the blending function coefficients. |
- * |
- * The blend function will be: |
- * D' = sat(S*srcCoef + D*dstCoef) |
- * |
- * where D is the existing destination color, S is the incoming source |
- * color, and D' is the new destination color that will be written. sat() |
- * is the saturation function. |
- * |
- * @param srcCoef coefficient applied to the src color. |
- * @param dstCoef coefficient applied to the dst color. |
- */ |
- void setBlendFunc(GrBlendCoeff srcCoeff, GrBlendCoeff dstCoeff) { |
- fSrcBlend = srcCoeff; |
- fDstBlend = dstCoeff; |
- #ifdef SK_DEBUG |
- if (GrBlendCoeffRefsDst(dstCoeff)) { |
- SkDebugf("Unexpected dst blend coeff. Won't work correctly with coverage stages.\n"); |
- } |
- if (GrBlendCoeffRefsSrc(srcCoeff)) { |
- SkDebugf("Unexpected src blend coeff. Won't work correctly with coverage stages.\n"); |
- } |
- #endif |
- } |
- |
- /** |
- * Sets the blending function constant referenced by the following blending |
- * coefficients: |
- * kConstC_GrBlendCoeff |
- * kIConstC_GrBlendCoeff |
- * kConstA_GrBlendCoeff |
- * kIConstA_GrBlendCoeff |
- * |
- * @param constant the constant to set |
- */ |
- void setBlendConstant(GrColor constant) { fBlendConstant = constant; } |
- |
/// @} |
/////////////////////////////////////////////////////////////////////////// |
@@ -637,47 +608,6 @@ public: |
private: |
bool isEqual(const GrDrawState& that) const; |
- /** |
- * Optimizations for blending / coverage to that can be applied based on the current state. |
- */ |
- enum BlendOpt { |
- /** |
- * No optimization |
- */ |
- kNone_BlendOpt, |
- /** |
- * Don't draw at all |
- */ |
- kSkipDraw_BlendOpt, |
- /** |
- * The coverage value does not have to be computed separately from alpha, the the output |
- * color can be the modulation of the two. |
- */ |
- kCoverageAsAlpha_BlendOpt, |
- /** |
- * Instead of emitting a src color, emit coverage in the alpha channel and r,g,b are |
- * "don't cares". |
- */ |
- kEmitCoverage_BlendOpt, |
- /** |
- * Emit transparent black instead of the src color, no need to compute coverage. |
- */ |
- kEmitTransBlack_BlendOpt |
- }; |
- |
- /** |
- * Determines what optimizations can be applied based on the blend. The coefficients may have |
- * to be tweaked in order for the optimization to work. srcCoeff and dstCoeff are optional |
- * params that receive the tweaked coefficients. Normally the function looks at the current |
- * state to see if coverage is enabled. By setting forceCoverage the caller can speculatively |
- * determine the blend optimizations that would be used if there was partial pixel coverage. |
- * |
- * This is used internally and when constructing a GrOptDrawState. |
- */ |
- BlendOpt getBlendOpt(bool forceCoverage = false, |
- GrBlendCoeff* srcCoeff = NULL, |
- GrBlendCoeff* dstCoeff = NULL) const; |
- |
const GrProcOptInfo& colorProcInfo() const { |
this->calcColorInvariantOutput(); |
return fColorProcInfo; |
@@ -716,13 +646,10 @@ private: |
SkAutoTUnref<GrRenderTarget> fRenderTarget; |
GrColor fColor; |
SkMatrix fViewMatrix; |
- GrColor fBlendConstant; |
uint32_t fFlagBits; |
GrStencilSettings fStencilSettings; |
uint8_t fCoverage; |
DrawFace fDrawFace; |
- GrBlendCoeff fSrcBlend; |
- GrBlendCoeff fDstBlend; |
SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor; |
SkAutoTUnref<const GrXPFactory> fXPFactory; |
FragmentStageArray fColorStages; |