Index: src/gpu/GrClipMaskManager.cpp |
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp |
index 8bd4fabac47be94a9853c09876336f5230675e89..e04d444a545e4789954f62f76b88a57f83696d4b 100644 |
--- a/src/gpu/GrClipMaskManager.cpp |
+++ b/src/gpu/GrClipMaskManager.cpp |
@@ -216,6 +216,9 @@ bool GrClipMaskManager::setupClipping(const GrClipData* clipDataIn, |
GrDrawState::AutoRestoreStencil* ars, |
ScissorState* scissorState) { |
fCurrClipMaskType = kNone_ClipMaskType; |
+ if (kRespectClip_StencilClipMode == fClipMode) { |
+ fClipMode = kIgnoreClip_StencilClipMode; |
+ } |
GrReducedClip::ElementList elements(16); |
int32_t genID; |
@@ -743,7 +746,7 @@ bool GrClipMaskManager::createStencilClipMask(int32_t elementsGenID, |
const Element* element = iter.get(); |
bool fillInverted = false; |
// enabled at bottom of loop |
- drawState->disableState(kModifyStencilClip_StateBit); |
+ fClipMode = kIgnoreClip_StencilClipMode; |
// if the target is MSAA then we want MSAA enabled when the clip is soft |
if (rt->isMultisampled()) { |
drawState->setState(GrDrawState::kHWAntialias_StateBit, element->isAA()); |
@@ -822,7 +825,7 @@ bool GrClipMaskManager::createStencilClipMask(int32_t elementsGenID, |
// now we modify the clip bit by rendering either the clip |
// element directly or a bounding rect of the entire clip. |
- drawState->enableState(kModifyStencilClip_StateBit); |
+ fClipMode = kModifyClip_StencilClipMode; |
for (int p = 0; p < passes; ++p) { |
*drawState->stencil() = stencilSettings[p]; |
if (canDrawDirectToClip) { |
@@ -845,6 +848,7 @@ bool GrClipMaskManager::createStencilClipMask(int32_t elementsGenID, |
// set this last because recursive draws may overwrite it back to kNone. |
SkASSERT(kNone_ClipMaskType == fCurrClipMaskType); |
fCurrClipMaskType = kStencil_ClipMaskType; |
+ fClipMode = kRespectClip_StencilClipMode; |
return true; |
} |
@@ -911,22 +915,12 @@ void GrClipMaskManager::setDrawStateStencil(GrDrawState::AutoRestoreStencil* ars |
// use stencil for clipping if clipping is enabled and the clip |
// has been written into the stencil. |
- GrClipMaskManager::StencilClipMode clipMode; |
- if (this->isClipInStencil() && drawState.isClipState()) { |
- clipMode = GrClipMaskManager::kRespectClip_StencilClipMode; |
- // We can't be modifying the clip and respecting it at the same time. |
- SkASSERT(!drawState.isStateFlagEnabled(kModifyStencilClip_StateBit)); |
- } else if (drawState.isStateFlagEnabled(kModifyStencilClip_StateBit)) { |
- clipMode = GrClipMaskManager::kModifyClip_StencilClipMode; |
- } else { |
- clipMode = GrClipMaskManager::kIgnoreClip_StencilClipMode; |
- } |
GrStencilSettings settings; |
// The GrGpu client may not be using the stencil buffer but we may need to |
// enable it in order to respect a stencil clip. |
if (drawState.getStencil().isDisabled()) { |
- if (GrClipMaskManager::kRespectClip_StencilClipMode == clipMode) { |
+ if (GrClipMaskManager::kRespectClip_StencilClipMode == fClipMode) { |
settings = basic_apply_stencil_clip_settings(); |
} else { |
return; |
@@ -944,7 +938,7 @@ void GrClipMaskManager::setDrawStateStencil(GrDrawState::AutoRestoreStencil* ars |
SkASSERT(fClipTarget->caps()->stencilWrapOpsSupport() || !settings.usesWrapOp()); |
SkASSERT(fClipTarget->caps()->twoSidedStencilSupport() || !settings.isTwoSided()); |
- this->adjustStencilParams(&settings, clipMode, stencilBits); |
+ this->adjustStencilParams(&settings, fClipMode, stencilBits); |
ars->set(fClipTarget->drawState()); |
fClipTarget->drawState()->setStencil(settings); |
} |
@@ -1116,22 +1110,12 @@ void GrClipMaskManager::setClipTarget(GrClipTarget* clipTarget) { |
void GrClipMaskManager::adjustPathStencilParams(GrStencilSettings* settings) { |
const GrDrawState& drawState = fClipTarget->getDrawState(); |
- GrClipMaskManager::StencilClipMode clipMode; |
- if (this->isClipInStencil() && drawState.isClipState()) { |
- clipMode = GrClipMaskManager::kRespectClip_StencilClipMode; |
- // We can't be modifying the clip and respecting it at the same time. |
- SkASSERT(!drawState.isStateFlagEnabled(kModifyStencilClip_StateBit)); |
- } else if (drawState.isStateFlagEnabled(kModifyStencilClip_StateBit)) { |
- clipMode = GrClipMaskManager::kModifyClip_StencilClipMode; |
- } else { |
- clipMode = GrClipMaskManager::kIgnoreClip_StencilClipMode; |
- } |
// TODO: dynamically attach a stencil buffer |
int stencilBits = 0; |
GrStencilBuffer* stencilBuffer = drawState.getRenderTarget()->getStencilBuffer(); |
if (stencilBuffer) { |
stencilBits = stencilBuffer->bits(); |
- this->adjustStencilParams(settings, clipMode, stencilBits); |
+ this->adjustStencilParams(settings, fClipMode, stencilBits); |
} |
} |