| Index: src/gpu/GrClipMaskManager.cpp
|
| diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp
|
| index e87c7e1bc5f29f074af032585caf04647559960b..5af6fb69ff508d86f600f37b10b6c66ac0dfb4fe 100644
|
| --- a/src/gpu/GrClipMaskManager.cpp
|
| +++ b/src/gpu/GrClipMaskManager.cpp
|
| @@ -362,6 +362,7 @@ void setup_boolean_blendcoeffs(SkRegion::Op op, GrDrawState* drawState) {
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| bool GrClipMaskManager::drawElement(GrDrawState* drawState,
|
| + GrColor color,
|
| GrTexture* target,
|
| const SkClipStack::Element* element,
|
| GrPathRenderer* pr) {
|
| @@ -380,11 +381,12 @@ bool GrClipMaskManager::drawElement(GrDrawState* drawState,
|
| if (element->isAA()) {
|
| this->getContext()->getAARectRenderer()->fillAARect(fClipTarget,
|
| drawState,
|
| + color,
|
| element->getRect(),
|
| SkMatrix::I(),
|
| element->getRect());
|
| } else {
|
| - fClipTarget->drawSimpleRect(drawState, element->getRect());
|
| + fClipTarget->drawSimpleRect(drawState, color, element->getRect());
|
| }
|
| return true;
|
| default: {
|
| @@ -406,7 +408,7 @@ bool GrClipMaskManager::drawElement(GrDrawState* drawState,
|
| return false;
|
| }
|
|
|
| - pr->drawPath(fClipTarget, drawState, path, stroke, element->isAA());
|
| + pr->drawPath(fClipTarget, drawState, color, path, stroke, element->isAA());
|
| break;
|
| }
|
| }
|
| @@ -460,7 +462,7 @@ void GrClipMaskManager::mergeMask(GrDrawState* drawState,
|
| GrTextureDomain::MakeTexelDomain(srcMask, srcBound),
|
| GrTextureDomain::kDecal_Mode,
|
| GrTextureParams::kNone_FilterMode))->unref();
|
| - fClipTarget->drawSimpleRect(drawState, SkRect::Make(dstBound));
|
| + fClipTarget->drawSimpleRect(drawState, GrColor_WHITE, SkRect::Make(dstBound));
|
| }
|
|
|
| GrTexture* GrClipMaskManager::createTempMask(int width, int height) {
|
| @@ -617,13 +619,12 @@ GrTexture* GrClipMaskManager::createAlphaClipMask(int32_t elementsGenID,
|
| setup_boolean_blendcoeffs(op, &drawState);
|
| }
|
|
|
| - drawState.setAlpha(invert ? 0x00 : 0xff);
|
| -
|
| // We have to backup the drawstate because the drawElement call may call into
|
| // renderers which consume it.
|
| GrDrawState backupDrawState(drawState);
|
|
|
| - if (!this->drawElement(&drawState, dst, element, pr)) {
|
| + if (!this->drawElement(&drawState, invert ? GrColor_TRANS_BLACK :
|
| + GrColor_WHITE, dst, element, pr)) {
|
| fAACache.reset();
|
| return NULL;
|
| }
|
| @@ -639,7 +640,6 @@ GrTexture* GrClipMaskManager::createAlphaClipMask(int32_t elementsGenID,
|
| maskSpaceElementIBounds);
|
| } else {
|
| // Draw to the exterior pixels (those with a zero stencil value).
|
| - backupDrawState.setAlpha(invert ? 0xff : 0x00);
|
| GR_STATIC_CONST_SAME_STENCIL(kDrawOutsideElement,
|
| kZero_StencilOp,
|
| kZero_StencilOp,
|
| @@ -648,7 +648,9 @@ GrTexture* GrClipMaskManager::createAlphaClipMask(int32_t elementsGenID,
|
| 0x0000,
|
| 0xffff);
|
| backupDrawState.setStencil(kDrawOutsideElement);
|
| - fClipTarget->drawSimpleRect(&backupDrawState, clipSpaceIBounds);
|
| + fClipTarget->drawSimpleRect(&backupDrawState,
|
| + invert ? GrColor_WHITE : GrColor_TRANS_BLACK,
|
| + clipSpaceIBounds);
|
| }
|
| } else {
|
| GrDrawState drawState(translate);
|
| @@ -656,9 +658,8 @@ GrTexture* GrClipMaskManager::createAlphaClipMask(int32_t elementsGenID,
|
| GrDrawState::kClip_StateBit);
|
|
|
| // all the remaining ops can just be directly draw into the accumulation buffer
|
| - drawState.setAlpha(0xff);
|
| setup_boolean_blendcoeffs(op, &drawState);
|
| - this->drawElement(&drawState, result, element);
|
| + this->drawElement(&drawState, GrColor_WHITE, result, element);
|
| }
|
| }
|
|
|
| @@ -783,13 +784,14 @@ bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt,
|
| 0xffff);
|
| if (Element::kRect_Type == element->getType()) {
|
| *drawState.stencil() = gDrawToStencil;
|
| - fClipTarget->drawSimpleRect(&drawState, element->getRect());
|
| + fClipTarget->drawSimpleRect(&drawState, GrColor_WHITE, element->getRect());
|
| } else {
|
| if (!clipPath.isEmpty()) {
|
| GrDrawTarget::AutoGeometryPush agp(fClipTarget);
|
| if (canRenderDirectToStencil) {
|
| *drawState.stencil() = gDrawToStencil;
|
| - pr->drawPath(fClipTarget, &drawState, clipPath, stroke, false);
|
| + pr->drawPath(fClipTarget, &drawState, GrColor_WHITE, clipPath, stroke,
|
| + false);
|
| } else {
|
| pr->stencilPath(fClipTarget, &drawState, clipPath, stroke);
|
| }
|
| @@ -806,15 +808,17 @@ bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt,
|
|
|
| if (canDrawDirectToClip) {
|
| if (Element::kRect_Type == element->getType()) {
|
| - fClipTarget->drawSimpleRect(&drawStateCopy, element->getRect());
|
| + fClipTarget->drawSimpleRect(&drawStateCopy, GrColor_WHITE,
|
| + element->getRect());
|
| } else {
|
| GrDrawTarget::AutoGeometryPush agp(fClipTarget);
|
| - pr->drawPath(fClipTarget, &drawStateCopy, clipPath, stroke, false);
|
| + pr->drawPath(fClipTarget, &drawStateCopy, GrColor_WHITE, clipPath, stroke, false);
|
| }
|
| } else {
|
| // The view matrix is setup to do clip space -> stencil space translation, so
|
| // draw rect in clip space.
|
| - fClipTarget->drawSimpleRect(&drawStateCopy, SkRect::Make(clipSpaceIBounds));
|
| + fClipTarget->drawSimpleRect(&drawStateCopy, GrColor_WHITE,
|
| + SkRect::Make(clipSpaceIBounds));
|
| }
|
| }
|
| }
|
|
|