Attempt to reland 3054
git-svn-id: http://skia.googlecode.com/svn/trunk@3056 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h
index b8417ba..c736f1e 100644
--- a/src/gpu/GrDrawState.h
+++ b/src/gpu/GrDrawState.h
@@ -70,6 +70,7 @@
// memset exceptions
fColor = 0xffffffff;
+ fCoverage = 0xffffffff;
fFirstCoverageStage = kNumStages;
fColorFilterMode = SkXfermode::kDst_Mode;
fSrcBlend = kOne_BlendCoeff;
@@ -78,9 +79,9 @@
// ensure values that will be memcmp'ed in == but not memset in reset()
// are tightly packed
- GrAssert(kMemsetSize + sizeof(fColor) + sizeof(fFirstCoverageStage) +
- sizeof(fColorFilterMode) + sizeof(fSrcBlend) +
- sizeof(fDstBlend) + sizeof(GrMatrix) ==
+ GrAssert(kMemsetSize + sizeof(fColor) + sizeof(fCoverage) +
+ sizeof(fFirstCoverageStage) + sizeof(fColorFilterMode) +
+ sizeof(fSrcBlend) + sizeof(fDstBlend) + sizeof(GrMatrix) ==
reinterpret_cast<intptr_t>(&fEdgeAANumEdges) -
reinterpret_cast<intptr_t>(this));
@@ -125,6 +126,33 @@
/// @}
///////////////////////////////////////////////////////////////////////////
+ /// @name Coverage
+ ////
+
+ /**
+ * Sets a constant fractional coverage to be applied to the draw. The
+ * initial value (after construction or reset()) is 0xff. The constant
+ * coverage is ignored when per-vertex coverage is provided.
+ */
+ void setCoverage(uint8_t coverage) {
+ fCoverage = GrColorPackRGBA(coverage, coverage, coverage, coverage);
+ }
+
+ /**
+ * Version of above that specifies 4 channel per-vertex color. The value
+ * should be premultiplied.
+ */
+ void setCoverage4(GrColor coverage) {
+ fCoverage = coverage;
+ }
+
+ GrColor getCoverage() const {
+ return fCoverage;
+ }
+
+ /// @}
+
+ ///////////////////////////////////////////////////////////////////////////
/// @name Textures
////
@@ -753,6 +781,7 @@
// @{ Initialized to values other than zero
GrColor fColor;
+ GrColor fCoverage;
int fFirstCoverageStage;
SkXfermode::Mode fColorFilterMode;
GrBlendCoeff fSrcBlend;