Index: include/gpu/GrXferProcessor.h |
diff --git a/include/gpu/GrXferProcessor.h b/include/gpu/GrXferProcessor.h |
index 8f1df67dab309ed1340c684b6186127ab4601aff..3eeedcfebf7e5db7c0cf5a3267ac98972a4e4f52 100644 |
--- a/include/gpu/GrXferProcessor.h |
+++ b/include/gpu/GrXferProcessor.h |
@@ -20,6 +20,43 @@ class GrGLXferProcessor; |
class GrProcOptInfo; |
/** |
+ * Equations for alpha-blending. |
+ */ |
+enum GrBlendEquation { |
+ kInvalid_GrBlendEquation = -1, |
+ |
+ // Basic blend equations. |
+ kAdd_GrBlendEquation, //<! Cs*S + Cd*D |
+ kSubtract_GrBlendEquation, //<! Cs*S - Cd*D |
+ kReverseSubtract_GrBlendEquation, //<! Cd*D - Cs*S |
+ |
+ kLastBasicGrBlendEquation = kReverseSubtract_GrBlendEquation, |
+ |
+ // Advanced blend equations. These are described in the SVG and PDF specs. |
+ kScreen_GrBlendEquation, |
+ kOverlay_GrBlendEquation, |
+ kDarken_GrBlendEquation, |
+ kLighten_GrBlendEquation, |
+ kColorDodge_GrBlendEquation, |
+ kColorBurn_GrBlendEquation, |
+ kHardLight_GrBlendEquation, |
+ kSoftLight_GrBlendEquation, |
+ kDifference_GrBlendEquation, |
+ kExclusion_GrBlendEquation, |
+ kMultiply_GrBlendEquation, |
+ kHSLHue_GrBlendEquation, |
+ kHSLSaturation_GrBlendEquation, |
+ kHSLColor_GrBlendEquation, |
+ kHSLLuminosity_GrBlendEquation, |
+ |
+ kTotalGrBlendEquationCount |
+}; |
+ |
+bool constexpr GrBlendEquationIsAdvanced(GrBlendEquation equation) { |
Chris Dalton
2015/04/23 16:45:49
Are we allowing C++11-isms yet?
bsalomon
2015/04/23 16:53:33
Some but not all. I'm not sure about the state of
|
+ return equation > kLastBasicGrBlendEquation; |
+} |
+ |
+/** |
* Coeffecients for alpha-blending. |
*/ |
enum GrBlendCoeff { |
@@ -53,6 +90,7 @@ enum GrBlendCoeff { |
*/ |
enum GrXferBarrierType { |
kTexture_GrXferBarrierType, //<! Required when a shader reads and renders to the same texture. |
+ kBlend_GrXferBarrierType, //<! Required by certain blend extensions. |
}; |
/** |
@@ -141,13 +179,15 @@ public: |
GrXferBarrierType* outBarrierType) const; |
struct BlendInfo { |
- GrBlendCoeff fSrcBlend; |
- GrBlendCoeff fDstBlend; |
- GrColor fBlendConstant; |
- bool fWriteColor; |
+ GrBlendEquation fEquation; |
+ GrBlendCoeff fSrcBlend; |
+ GrBlendCoeff fDstBlend; |
+ GrColor fBlendConstant; |
+ bool fWriteColor; |
}; |
void getBlendInfo(BlendInfo* blendInfo) const { |
+ blendInfo->fEquation = kAdd_GrBlendEquation; |
blendInfo->fSrcBlend = kOne_GrBlendCoeff; |
blendInfo->fDstBlend = kZero_GrBlendCoeff; |
blendInfo->fBlendConstant = 0; |