Chromium Code Reviews| Index: src/gpu/GrClipMaskManager.cpp |
| diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp |
| index 3ecc922999d34d139c2b82303b8b8da28ad183a1..6c85329181a0b3055f16ba566b4773aa88019168 100644 |
| --- a/src/gpu/GrClipMaskManager.cpp |
| +++ b/src/gpu/GrClipMaskManager.cpp |
| @@ -485,21 +485,14 @@ void GrClipMaskManager::mergeMask(GrTexture* dstMask, |
| fGpu->drawSimpleRect(SkRect::Make(dstBound)); |
| } |
| -// get a texture to act as a temporary buffer for AA clip boolean operations |
| -// TODO: given the expense of createTexture we may want to just cache this too |
| -void GrClipMaskManager::getTemp(int width, int height, GrAutoScratchTexture* temp) { |
| - if (temp->texture()) { |
| - // we've already allocated the temp texture |
| - return; |
| - } |
| - |
| +GrTexture* GrClipMaskManager::createTempMask(int width, int height) { |
| GrTextureDesc desc; |
| desc.fFlags = kRenderTarget_GrTextureFlagBit|kNoStencil_GrTextureFlagBit; |
| desc.fWidth = width; |
| desc.fHeight = height; |
| desc.fConfig = kAlpha_8_GrPixelConfig; |
| - temp->set(this->getContext(), desc); |
| + return fGpu->getContext()->refScratchTexture(desc, GrContext::kApprox_ScratchTexMatch); |
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -593,7 +586,7 @@ GrTexture* GrClipMaskManager::createAlphaClipMask(int32_t elementsGenID, |
| GrDrawTarget::AutoClipRestore acr(fGpu, maskSpaceIBounds); |
| drawState->enableState(GrDrawState::kClip_StateBit); |
| - GrAutoScratchTexture temp; |
| + SkAutoTUnref<GrTexture> temp; |
| // walk through each clip element and perform its set op |
| for (ElementList::Iter iter = elements.headIter(); iter.get(); iter.next()) { |
| const Element* element = iter.get(); |
| @@ -619,12 +612,15 @@ GrTexture* GrClipMaskManager::createAlphaClipMask(int32_t elementsGenID, |
| elementBounds.roundOut(&maskSpaceElementIBounds); |
| } |
| - this->getTemp(maskSpaceIBounds.fRight, maskSpaceIBounds.fBottom, &temp); |
| - if (NULL == temp.texture()) { |
| - fAACache.reset(); |
| - return NULL; |
| + if (!temp) { |
| + temp.reset(this->createTempMask(maskSpaceIBounds.fRight, |
|
robertphillips
2014/10/16 20:28:25
tab this over?
bsalomon
2014/10/16 20:34:44
Done.
|
| + maskSpaceIBounds.fBottom)); |
| + if (!temp) { |
| + fAACache.reset(); |
| + return NULL; |
| + } |
| } |
| - dst = temp.texture(); |
| + dst = temp; |
| // clear the temp target and set blend to replace |
| fGpu->clear(&maskSpaceElementIBounds, |
| invert ? 0xffffffff : 0x00000000, |
| @@ -658,7 +654,7 @@ GrTexture* GrClipMaskManager::createAlphaClipMask(int32_t elementsGenID, |
| // Now draw into the accumulator using the real operation and the temp buffer as a |
| // texture |
| this->mergeMask(result, |
| - temp.texture(), |
| + temp, |
| op, |
| maskSpaceIBounds, |
| maskSpaceElementIBounds); |