Index: src/gpu/GrClipMaskManager.cpp |
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp |
index 136217967396afb605cc5c5362228421b3f94468..bc20c2542fcd19cce8c3945259b46c4fdde82694 100644 |
--- a/src/gpu/GrClipMaskManager.cpp |
+++ b/src/gpu/GrClipMaskManager.cpp |
@@ -37,8 +37,6 @@ void setup_drawstate_aaclip(GrGpu* gpu, |
GrDrawState* drawState = gpu->drawState(); |
GrAssert(drawState); |
- static const int kMaskStage = GrPaint::kTotalStages+1; |
- |
SkMatrix mat; |
// We want to use device coords to compute the texture coordinates. We set our matrix to be |
// equal to the view matrix followed by an offset to the devBound, and then a scaling matrix to |
@@ -50,8 +48,8 @@ void setup_drawstate_aaclip(GrGpu* gpu, |
SkIRect domainTexels = SkIRect::MakeWH(devBound.width(), devBound.height()); |
// This could be a long-lived effect that is cached with the alpha-mask. |
- drawState->setEffect(kMaskStage, |
- GrTextureDomainEffect::Create(result, |
+ drawState->addCoverageEffect( |
+ GrTextureDomainEffect::Create(result, |
mat, |
GrTextureDomainEffect::MakeTexelDomain(result, domainTexels), |
GrTextureDomainEffect::kDecal_WrapMode, |
@@ -109,7 +107,8 @@ bool GrClipMaskManager::useSWOnlyPath(const ElementList& elements) { |
//////////////////////////////////////////////////////////////////////////////// |
// sort out what kind of clip mask needs to be created: alpha, stencil, |
// scissor, or entirely software |
-bool GrClipMaskManager::setupClipping(const GrClipData* clipDataIn) { |
+bool GrClipMaskManager::setupClipping(const GrClipData* clipDataIn, |
+ GrDrawState::AutoRestoreEffects* are) { |
fCurrClipMaskType = kNone_ClipMaskType; |
ElementList elements(16); |
@@ -178,6 +177,7 @@ bool GrClipMaskManager::setupClipping(const GrClipData* clipDataIn) { |
// clipSpace bounds. We determine the mask's position WRT to the render target here. |
SkIRect rtSpaceMaskBounds = clipSpaceIBounds; |
rtSpaceMaskBounds.offset(-clipDataIn->fOrigin); |
+ are->set(fGpu->drawState()); |
setup_drawstate_aaclip(fGpu, result, rtSpaceMaskBounds); |
fGpu->disableScissor(); |
this->setGpuStencil(); |
@@ -350,6 +350,7 @@ void GrClipMaskManager::mergeMask(GrTexture* dstMask, |
GrDrawState::AutoViewMatrixRestore avmr; |
GrDrawState* drawState = fGpu->drawState(); |
SkAssertResult(avmr.setIdentity(drawState)); |
+ GrDrawState::AutoRestoreEffects are(drawState); |
drawState->setRenderTarget(dstMask->asRenderTarget()); |
@@ -357,15 +358,13 @@ void GrClipMaskManager::mergeMask(GrTexture* dstMask, |
SkMatrix sampleM; |
sampleM.setIDiv(srcMask->width(), srcMask->height()); |
- drawState->setEffect(0, |
+ drawState->addColorEffect( |
GrTextureDomainEffect::Create(srcMask, |
sampleM, |
GrTextureDomainEffect::MakeTexelDomain(srcMask, srcBound), |
GrTextureDomainEffect::kDecal_WrapMode, |
false))->unref(); |
fGpu->drawSimpleRect(SkRect::MakeFromIRect(dstBound), NULL); |
- |
- drawState->disableStage(0); |
} |
// get a texture to act as a temporary buffer for AA clip boolean operations |