diff options
author | 2015-02-23 09:06:38 -0800 | |
---|---|---|
committer | 2015-02-23 09:06:38 -0800 | |
commit | 6bc1b5fab8554a9cb643277b4867965dd4535cd6 (patch) | |
tree | 3179261534d7db7a8264735b327daa59593e1dd0 /src/gpu/GrRenderTarget.cpp | |
parent | 42380174ca509e78ab932fa8c6dae953e1eaaa5a (diff) |
Dynamically create stencil buffer when needed.
Review URL: https://codereview.chromium.org/938383004
Diffstat (limited to 'src/gpu/GrRenderTarget.cpp')
-rw-r--r-- | src/gpu/GrRenderTarget.cpp | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/gpu/GrRenderTarget.cpp b/src/gpu/GrRenderTarget.cpp index 386bd2e779..042e19f6ad 100644 --- a/src/gpu/GrRenderTarget.cpp +++ b/src/gpu/GrRenderTarget.cpp @@ -11,6 +11,7 @@ #include "GrContext.h" #include "GrGpu.h" +#include "GrRenderTargetPriv.h" #include "GrStencilBuffer.h" void GrRenderTarget::discard() { @@ -46,18 +47,30 @@ void GrRenderTarget::overrideResolveRect(const SkIRect rect) { } } -void GrRenderTarget::setStencilBuffer(GrStencilBuffer* stencilBuffer) { - SkRefCnt_SafeAssign(fStencilBuffer, stencilBuffer); -} - void GrRenderTarget::onRelease() { - this->setStencilBuffer(NULL); + this->renderTargetPriv().didAttachStencilBuffer(NULL); INHERITED::onRelease(); } void GrRenderTarget::onAbandon() { - this->setStencilBuffer(NULL); + this->renderTargetPriv().didAttachStencilBuffer(NULL); INHERITED::onAbandon(); } + +/////////////////////////////////////////////////////////////////////////////// + +void GrRenderTargetPriv::didAttachStencilBuffer(GrStencilBuffer* stencilBuffer) { + SkRefCnt_SafeAssign(fRenderTarget->fStencilBuffer, stencilBuffer); +} + +GrStencilBuffer* GrRenderTargetPriv::attachStencilBuffer() const { + if (fRenderTarget->fStencilBuffer) { + return fRenderTarget->fStencilBuffer; + } + if (!fRenderTarget->wasDestroyed() && fRenderTarget->canAttemptStencilAttachment()) { + fRenderTarget->getGpu()->attachStencilBufferToRenderTarget(fRenderTarget); + } + return fRenderTarget->fStencilBuffer; +} |