| Index: src/gpu/GrClipMaskManager.cpp
|
| diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp
|
| index 3ecc922999d34d139c2b82303b8b8da28ad183a1..1d055655e56ca18c41501bcbc53f3fc6a02f22fe 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,
|
| + 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);
|
|
|