aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrRenderTarget.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2015-02-23 09:06:38 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-02-23 09:06:38 -0800
commit6bc1b5fab8554a9cb643277b4867965dd4535cd6 (patch)
tree3179261534d7db7a8264735b327daa59593e1dd0 /src/gpu/GrRenderTarget.cpp
parent42380174ca509e78ab932fa8c6dae953e1eaaa5a (diff)
Dynamically create stencil buffer when needed.
Diffstat (limited to 'src/gpu/GrRenderTarget.cpp')
-rw-r--r--src/gpu/GrRenderTarget.cpp25
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;
+}